xx.exe 中的 0x7c92e4df 處最可能的異常: 0xC0000008: An invalid handle was specified

今天遇到個超級奇怪的問題,昨天還好端端的程序,今天用VS打開後,在關閉主窗口的時候居然彈出錯誤提示:xx.exe 中的 0x7c92e4df 處最可能的異常: "0xC0000008: An invalid handle was specified".當時都鬱悶了,你說奇了怪了,什麼代碼都沒改,只是清理了下解決方案而已,不至於嘛!然後,就想着是不是以下MainForm_FormClosing事件中的代碼問題:

仔細審察後,沒發現什麼異常問題.只是調試到WndProc函數後,程序就出現了錯誤提示.

滿心歡喜以爲找到了問題所在,可是卻沒有一點提示信息,當時是無從下手啊.不僅這樣,很奇怪的是,明明我已經終止了程序,但是再次啓動調試卻不可以,跑到進程裏一看,已經莫名奇妙有個同樣的程序在運行,想終止它也不行.最後把VS關了,再看進程,沒有了.把我又給鬱悶了,什麼情況?

"我們的項目是C#做的界面,C++做的底層,調用了不少的動態鏈接庫,會不會是調用動態庫的問題",腦袋只是一閃而過,但立刻打消了這個念頭.因爲程序昨天下班還是好好的嘛.其實,自己做的程序,心裏特別得知道是不是程序的問題.我當時就相信不是程序的問題,可能是其它什麼原因導致的.

自己搗鼓了一會兒無果,就請教Leader幫忙看看(有近十年編程經驗,我挺佩服的一個人),我就簡單描述下吧:

首先問題出在wndproc函數內,調試未果,於是我們就用spy++捕獲消息源,折騰一會兒也是無果.因爲,你根本就看不到任何提示,任何可能引起異常的代碼.沒有一丁點兒頭緒.加上進程裏關不掉的程序.我們更加堅信不是代碼問題,於是我試着用發佈版的代碼,啓動關閉程序都沒有問題.看來問題出在調試代碼的時候.但是調試過程中能出現什麼問題呢?實在是又沒頭緒了,於是Leader說把代碼發給他,他在他的電腦上完美運行,未出現問題.這下有眉目了,至少可以判斷不是代碼的問題了.但又是什麼原因導致的呢?先從啓電腦,再到今天安裝了什麼軟件,把無關的破軟件關掉卸載...等等,我們都嘗試了.問題還是沒有解決,難不成,我得重裝系統了麼.趕上中午吃飯,也不再想這個問題了.下午一上班,google了下,看見也有類似問題,但都是一些沒有解決的,倒是有個發了個c/c++的給了我提示,我就把對我有用的文字截圖如下:

雖然問題不是一樣,但很可能就是我的程序調用了其它的dll,於是就用Leader寫的一個可以看運行的程序進程中調用了哪些dll的程序,打開一個正常的程序,打開一個調試中出現問題的程序,對比它們,發現出現問題的程序比正常程序多調用了4個dll,排除系統動態庫,以及本程序調用的動態庫,發現多的4個動態庫,居然是其它程序的,MMD,終於找到問題所在了,然後用Dependency walker查看這些動態庫裏面調用了些什麼函數,發現都有個DbgPint函數,它是用來調試的.

果斷卸載關聯軟件,問題解決.感謝Leader.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章