xx.exe 中的 0x7c92e4df 处最可能的异常: 0xC0000008: An invalid handle was specified
今天遇到个超级奇怪的问题,昨天还好端端的程序,今天用VS打开后,在关闭主窗口的时候居然弹出错误提示:xx.exe 中的 0x7c92e4df 处最可能的异常: "0xC0000008: An invalid handle was specified".当时都郁闷了,你说奇了怪了,什么代码都没改,只是清理了下解决方案而已,不至于嘛!然后,就想着是不是以下MainForm_FormClosing事件中的代码问题:
仔细审察后,没发现什么异常问题.只是调试到WndProc函数后,程序就出现了错误提示.
满心欢喜以为找到了问题所在,可是却没有一点提示信息,当时是无从下手啊.不仅这样,很奇怪的是,明明我已经终止了程序,但是再次启动调试却不可以,跑到进程里一看,已经莫名奇妙有个同样的程序在运行,想终止它也不行.最后把VS关了,再看进程,没有了.把我又给郁闷了,什么情况?
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/net/
"我们的项目是C#做的界面,C++做的底层,调用了不少的动态链接库,会不会是调用动态库的问题",脑袋只是一闪而过,但立刻打消了这个念头.因为程序昨天下班还是好好的嘛.其实,自己做的程序,心里特别得知道是不是程序的问题.我当时就相信不是程序的问题,可能是其它什么原因导致的.
自己捣鼓了一会儿无果,就请教Leader帮忙看看(有近十年编程经验,我挺佩服的一个人),我就简单描述下吧:
首先问题出在wndproc函数内,调试未果,于是我们就用spy++捕获消息源,折腾一会儿也是无果.因为,你根本就看不到任何提示,任何可能引起异常的代码.没有一丁点儿头绪.加上进程里关不掉的程序.我们更加坚信不是代码问题,于是我试着用发布版的代码,启动关闭程序都没有问题.看来问题出在调试代码的时候.但是调试过程中能出现什么问题呢?实在是又没头绪了,于是Leader说把代码发给他,他在他的电脑上完美运行,未出现问题.这下有眉目了,至少可以判断不是代码的问题了.但又是什么原因导致的呢?先从启电脑,再到今天安装了什么软件,把无关的破软件关掉卸载...等等,我们都尝试了.问题还是没有解决,难不成,我得重装系统了么.赶上中午吃饭,也不再想这个问题了.下午一上班,google了下,看见也有类似问题,但都是一些没有解决的,倒是有个发了个c/c++的给了我提示,我就把对我有用的文字截图如下:
虽然问题不是一样,但很可能就是我的程序调用了其它的dll,于是就用Leader写的一个可以看运行的程序进程中调用了哪些dll的程序,打开一个正常的程序,打开一个调试中出现问题的程序,对比它们,发现出现问题的程序比正常程序多调用了4个dll,排除系统动态库,以及本程序调用的动态库,发现多的4个动态库,居然是其它程序的,MMD,终于找到问题所在了,然后用Dependency walker查看这些动态库里面调用了些什么函数,发现都有个DbgPint函数,它是用来调试的.
果断卸载关联软件,问题解决.感谢Leader.