[英]DUMP in unhandled C++ exception
在MSVC中,如何使任何未處理的C ++異常(例如std :: runtime_error)崩潰我的發布編譯程序,以便它從異常拋出位置生成具有完整堆棧的轉儲?
我已經在AeDebug注冊表中安裝了NTSD,並且可以為內存訪問違規等事情生成良好的轉儲,所以這里的問題歸結為正確地崩潰程序,我想。
提前致謝。
我終於把它搞砸了。
set_terminate()
函數為每個線程注冊一個處理程序 SetUnhandledExceptionFilter()
。 關於如何在此處執行此操作的精彩文章: http : //www.debuginfo.com/articles/debugfilters.html#overwrite 。 void Terminate()
{
OutputDebugStringA("Terminate\r\n");
RaiseException(0xE0000010, EXCEPTION_NONCONTINUABLE, 0, 0);
}
像上面的例子一樣調用RaiseException()
足以使進程崩潰並產生我想要的轉儲。
你知道,我遇到的問題是:
SetUnhandledExceptionFilter()
來捕獲C ++異常。 由於最新的C ++異常過濾器是由set_terminate()調用句柄集的過程,因此我的句柄未被調用。 SetUnhandledExceptionFilter
和DebugBreak
應該可以完成這項工作。
編輯:oops,重讀,你想處理未捕獲的C ++異常。 這樣做會有點麻煩 - 當你(通常)得到一個C ++異常時,它已經將堆棧解開回到處理程序的級別。 在調用catch
之前,您沒有任何真正的方法可以知道拋出異常,但到那時堆棧已經解開。
查看使用Windows調試器。
Windbg - 用一個不錯的用戶界面包裝KD和NTSD。
另請查看Windows調試器附帶的ADPlus。
這是一個開始學習如何使用它的好地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.