2014-01-07 50 views
1

我有一個64位的MFC應用程序,我在其中使用崩潰報告。該方法基於這篇文章: http://www.codeproject.com/KB/debug/XCrashReportPt1.aspx?display=Print 所以我有一個__try - __except包裝框架圍繞AfxWinMain。 去年它似乎工作得很好(我的意思是在不同的操作系統上,以及32位和64位應用程序)。 讓我們這個異常提供的代碼部分:MFC應用程序異常處理奇怪行爲

void CMyDig::Foo() 
    { 
     std::vector<int> v; 
     int i = v.at(42); 
    } 

當我寫這篇文章的代碼對話框的消息處理程序中,例如則例外AfxWinMain沒有抓到一個按鈕的函數clickhandler叫富。 如果我將它寫入全局函數,它將例外傳遞給AfxWinMain。 現在我們有這個奇怪的問題: 在某些計算機上,對話框的情況也會生成崩潰報告(輸入afxwinmain中的__except塊),但其他編號不會。我設法創建了一個關於win7 64位的崩潰報告,但在win8,win8.1和另一個win7 64bit上的相同程序不會生成報告! 我使用vs2010進行編譯,並且在代碼生成選項中,「enable C++ exceptions」被設置爲EHsc(與去年一樣,它運行良好)。

感謝您的任何想法! Attila

回答

0

僅僅定義SetUnhandledExceptionFilter來創建崩潰報告並不容易。

在這種情況下,你不需要這樣的__try/__except塊

WndProcs有自己的__try __except塊和一些異常都是由自己完成。不管怎樣。我從來沒有與異常過濾器的問題。我的例程通常會創建一個崩潰轉儲(minidump)並終止。我始終認爲,這些裸露的信息對於我們的技術人員來說找不到問題是不夠的。

+0

謝謝!你指出了正確的方法,它似乎爲我工作!我也使用這個指南:http://www.codeproject.com/Articles/154686/SetUnhandledExceptionFilter-and-the-C-C-Runtime-Li – balazsati