如何在發布後程式中捕獲程式的崩潰和異常往往是比較麻煩的事情,一般採用日誌記錄的方法來記錄程式執行的每個流程,但是通常為了程式執行的效能,日誌記錄的方法只是記錄程式執行的每個主要的處理流程,不能進行具體詳細的記錄,比如for 迴圈中的崩潰記錄。c++語言中呼叫window api函式createfile()和minidumpwritedump(),可以方便的記錄程式崩潰時的dump資訊,並保持dump檔案,根據dump檔案對應的原始碼工程和.pdb檔案,我們就可以快速的定位到程式崩潰的原始碼位置,極大的提高了除錯**的效率。然而,dump記錄程式崩潰的方法不是萬能的,有時候一些陣列越界、容器訪問異常等致命的問題,也不一定能準確的記錄下來。總之,dump檔案記錄程式崩潰的方法是開放人員常用的方法,並且能捕獲大多數的程式崩潰問題。
下面是一段記錄程式崩潰時生成dump檔案的方法,只要在工程中包含這個標頭檔案**,然後在程式建構函式中宣告 runcrashhandler(); 即可在程式崩潰時記錄生成的dump檔案:
#ifndef dumpfile_h
#define dumpfile_h
#include #include #include #include using namespace std;
#pragma comment(lib, "dbghelp.lib")
namespace nsdumpfile
lptop_level_exception_filter winapi mydummysetunhandledexceptionfilter(lptop_level_exception_filter lptoplevelexceptionfilter)
bool preventsetunhandledexceptionfilter()
long winapi unhandledexceptionfilterex(struct _exception_pointers *pexception)
; //::getmodulefilename(null, szmbsfile, max_path);
//tchar* pfind = _tcsrchr(szmbsfile, '\\');
//if (pfind)
////建立 dmp 資料夾
char *_path = "dumps";
int retval = _mkdir(_path);
tchar szfilename[max_path] = ;
tchar* szversion = _t("reg");
systemtime stlocaltime;
getlocaltime(&stlocaltime);
wsprintf(szfilename, l"dumps/%s_%04d%02d%02d-%02d%02d%02d.dmp",
szversion, stlocaltime.wyear, stlocaltime.wmonth, stlocaltime.wday,
stlocaltime.whour, stlocaltime.wminute, stlocaltime.wsecond);
createdumpfile(szfilename, pexception);
// todo: minidumpwritedump
return exception_continue_search;
} void runcrashhandler() };
#define declaredumpfile() nsdumpfile::runcrashhandler();
#endif //dumpfile_h
C 生成dump檔案,除錯dump檔案
dump 檔案是程序的記憶體映象 可以把程式的執行狀態通過偵錯程式儲存到dump檔案中 dump 檔案是用來給驅動程式編寫人員除錯驅動程式用的 這種檔案必須用專用工具軟體開啟 比如使用 windbg visualstudio開啟 當我們的程式發布出去之後 在客戶機上是無法跟蹤自己 的 bug 的 所...
DUMP檔案除錯
一 vc6.0下 1 首先要生成 pdb和 map檔案,需要做以下設定 勾選紅色的地方 按上面截圖的設定好後編譯即可。二 dmp檔案生成 1 dmp 檔案的生成,這個需要依賴一些 來生成這個檔案,這裡就不貼 了。程式測試下這個函式。上面 讓他人為崩潰,執行完後崩潰,會生成dmp檔案。三 windbg...
如何除錯崩潰dump檔案
其實除錯dump檔案很簡單,雙擊自動開啟vc然後f7執行。但是中間要注意很多事情。1。dump檔案放在 dump檔案不用非要放在你編譯出來的位置,你完全可以建立乙個新的資料夾來放它。2。要恢復當時的現場 可能你要問,怎麼可能,這個dump檔案可是使用者發給我的,我不可能去使用者家裡除錯吧?這個恢復現...