[英]Program crashes with 0xC000000D and no exceptions - how do I debug it?
我有一個使用第三方庫的Visual C ++ 9 Win32應用程序。 當使用某組參數調用該庫中的函數時,程序將以“異常代碼0xC000000D”崩潰。
我試圖附加Visual Studio調試器 - 沒有拋出異常(既沒有C ++也沒有像訪問沖突那樣結構化),也沒有調用terminate()
。 程序仍然默默地結束。
程序如何異常結束但是沒有在調試器中停止會怎么樣? 我該如何本地化問題?
這是STATUS_INVALID_PARAMETER,使用WinDbg來追蹤是誰投擲它(即附加WinDbg, sxe eh
然后g
。
對該問題的其他答案和評論幫助很大。 這就是我做的。
我注意到,如果我在Visual Studio調試器下運行該程序它只是靜默地結束,但是如果我在沒有調試器的情況下運行它會崩潰並顯示一個消息框(通常的Windows消息框說我丟失了未保存的數據,每個人都很抱歉)。
所以我在沒有調試器的情況下啟動了程序,讓它崩潰然后 - 當消息框仍然存在時 - 連接調試器並點擊“Break”。 這是調用堆棧:
ntdll.dll!_KiFastSystemCallRet@0()
ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc bytes
kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x48 bytes
kernel32.dll!_WaitForMultipleObjects@16() + 0x18 bytes
faultrep.dll!StartDWException() + 0x5df bytes
faultrep.dll!ReportFault() + 0x533 bytes
kernel32.dll!_UnhandledExceptionFilter@4() + 0x55c bytes
//SomeThirdPartyLibraryFunctionAddress
//SomeThirdPartyLibraryFunctionAddress
//SomeThirdPartyLibraryFunctionAddress
//SomeThirdPartyLibraryFunctionAddress
//OurCodeInvokingThirdPartyLibraryCode
很明顯,這是trird-party庫中的一些問題。 根據MSDN,在致命的情況下調用UnhandledExceptionFilter()
,顯然由於庫代碼中的某些問題而完成調用。 因此,我們首先嘗試與庫供應商一起解決問題。
如果您沒有第三方庫的源和調試信息,則無法使用調試器進入它。 在我看來,你的選擇是;
很難修復僅作為對象提供的代碼
編輯您也可以使用__try __finally在主消息循環周圍更優雅地退出,例如
int CMyApp::Run()
{
__try
{
int i = CWinApp::Run();
m_Exitok = MAGIC_EXIT_NO;
return i;
}
__finally
{
if (m_Exitok != MAGIC_EXIT_NO)
FaultHandler();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.