2014-03-28 42 views
3

我有一個崩潰minidump來分析。我的程序是多線程Qt5應用程序。我不是一個調試大師,但通常我可以很容易地找到程序失敗的地方,但這次我不能。我在Visual Studio 2010中打開了轉儲文件,單擊「僅使用本機進行調試」,它向我展示了問題所在:它是位置爲「__CxxUnhandledExceptionFilter」的線程。調用堆棧是這樣的:Crashdump分析:CxxUnhandledExceptionFilter

msvcr100.dll()!_abort() 
msvcr100.dll()!terminate() 
program.exe!__CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS * pPtrs) 
KERNELBASE.dll!_UnhandledExceptionFilter() 
ntdll.dll!__RtlUserThreadStart() 
ntdll.dll!__RtlUserThreadStart() 

我希望看到與程序功能和Qt內部函數的堆棧。但這個調用堆棧告訴我沒有什麼有趣的。所以請告訴我什麼是「ExceptionFilter」線程,我如何找到程序實際失敗的地方?

回答

3

您正在查看應用程序的位置,未處理的異常已被默認的異常過濾器捕獲。

也就是說,您沒有看到發生異常的行。

不幸的是,這意味着轉儲可能不包含有用的信息。

您可能會嘗試檢查_EXCEPTION_POINTERS結構,它可能包含觸發未處理的異常的指令的EIP

查看pPtrs->ExceptionRecord->ExceptionAddress的值,該值應該爲EIP

從MSDN:

ExceptionAddress:發生異常的地址。

要在出現異常的位置獲取堆棧跟蹤,請閱讀http://support.microsoft.com/kb/313109

+0

哇,你回答的太快了,謝謝:)異常地址指向kernelbase.dll,因爲我可以看到它是_RaiseException @ 16函數。它是內核故障嗎? – YuriM

+0

@YuriM大聲笑,不太可能。您可能會將一些不正確的參數提供給WinApi函數或您調用的代碼。這些函數將執行健全性檢查,並在不喜歡數據的情況下拋出異常。你檢查了其餘的論點嗎?在結構中可能有調用堆棧的記錄。 – sashoalm

+0

我會在下週晚些時候做的:) – YuriM