軟件Release版本異常捕獲程序(BugReport)

一.設計目的
    由於很多的軟件產品,會不時的遇到一些異常崩潰的情況,而有時候,這個問題又不時總能重現,導致開發人員無法跟進此Bug;另一方面,在我們的軟件產品發佈出去之後,客戶在使用過程中,也會遇到一些這樣的情況,而一旦這樣的情況發生之後,軟件會毫不猶豫的彈出Windows錯誤並無情的結束程序。本程序的設計的目的就是爲了解決這樣的問題,在軟件出問題的情況下,記錄下發生的異常的詳細信息,同時提供更爲友好的用戶界面,由用戶自由的選擇是否將記錄下來的異常的信息寄給我們。接下來,我們只要根據用戶提供的異常信息,分析Bug,並解決它!
 
二.原理
    設置自己的最終的Exception Handle,所有未捕獲的異常發生時,都會調用到這裏,在這裏,記錄下當前的一些環境信息和異常的信息。
 
LONG WINAPI UnhandledExceptionFilter(
        PEXCEPTION_POINTERS pExceptionInfo
)
{
    // 記錄下詳細的異常信息和當前的環境信息
    ......
}

SetUnhandledExceptionFilter(UnhandledExceptionFilter)
 
三.實現
    該程序由BugReport.dll和BugReport.exe組成。BugReport.dll實現在異常發生之後,將異常相關的信息捕抓到文件BugDetail.dat文件中,之後啓動BugReport.exe,傳入參數BugDetail.dat的路徑,由BugReport.exe提供友好的界面給用戶,並提供用戶選擇是否將該文件寄給軟件的維護人員。
 
BugReport.dll :
 
詳細的實現過程見源碼。
 
四.使用
    本程序提供3個文件:BugReport.dll,BugReport.exe,LoadBugReport.h .
 
1.新建工程
2.Include LoadBugReport.h
3.將BugReport.dll,BugReport.exe複製到生成文件的相同目錄(也可不用,不過不同目錄,早Load時,參數傳入路徑)
4. 加載&啓動
    CLoadBugReport::Instance().LoadLibrary();
     CLoadBugReport::Instance().BootReport();
5. 完成,這時候,如果程序中出現未捕獲的異常,將運行BugReport.exe。
 
五.測試界面
一旦程序異常,將彈出:
    用戶點擊“發送”,即可將異常信息寄到相應的位置,此功能沒有實現,之後根據相應的需求來實現該功能。
    用戶可以點擊“點擊查看詳情”,將顯示:
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章