2011-02-16 64 views
3

有沒有人有任何建議或教程來創建程序的崩潰報告?我想開始發送一個我一直在開發給人們的遊戲,但是如果遊戲因錯誤處理而崩潰,我希望將這些報告發送到我已註冊的電子郵件地址(以及從該程序收集的數據)。有誰知道如何做到這一點?創建併發送崩潰報告

+3

到目前爲止,您還沒有接受過很多答案。是什麼讓我覺得我這次能夠滿足你? – 2011-02-17 00:00:59

+2

我的努力工作:搜索「SetUnhandledExceptionFilter」。在SO覆蓋得很好。 – 2011-02-17 00:13:05

+1

David Heffernan,許多回應都不是主題,而是偏離了我所要求的。 – jack 2011-02-17 00:29:39

回答

3

執行崩潰報告最直接的方法是在代碼中使用try-catch語句。發生異常時,創建一個臨時日誌文件,其中包括髮生崩潰的異常類型,源代碼類,函數和行以及全局和本地變量/容器的數據,其中一些應包含用戶輸入。

您不通過電子郵件發送錯誤日誌,但您的程序會打開一個端口並將數據發送到服務器,該服務器會持續偵聽預定義的端口以獲取錯誤報告。

更高級的錯誤報告可以包括內存轉儲和寄存器的值。爲了讀取內存值,一個快速而又髒的方法是使用一個指針來迭代地讀取堆棧區域的值。對於寄存器值,您可以使用asm關鍵字。

1

如果你想要某種開箱錯誤通過互聯網申報的,你應該檢查出EQATEC analytics

其中有一個可用的C++接口。

2

可以使用Debug Help Library中的MiniDumpWriteDump函數通過每個線程的堆棧轉儲創建轉儲文件。我相信你可以在Visual Studio中打開文件並查看它的調試器(或接近它)。

2

Maciej Sinilo's blog還有一些很好的示例代碼(他也是一名遊戲程序員)。代碼包括如何從崩潰中獲取信息(例如,它是無效的讀取還是寫入)以及callstack或者minidump。這足以讓我開始爲我們的測試系統添加一個崩潰處理程序。

希望有所幫助。