在c++程式開發過程中,會經常遇到程式崩潰的情況,此時如果說程式**行數較少的情況下,可直接通過除錯**來確定錯誤位置,但是如果說是公司專案,**行數肯定少不了,此時通過單步跟蹤的方法來查詢bug的話,就有點困難了。
此時可借助c++提供的生成dump檔案的方法來確定程式的錯誤位置。
首先是要包含生成dump的類,這裡就如何新增**生成dump檔案做一些介紹:
1.將brexceptionfilter.h標頭檔案包含進專案的入口檔案中;
2.在程式的最開始處直接呼叫brwinmaincrtstartup()即可;
3.此時在程式任意位置寫乙個給空指標賦值,編譯並執行,就會生成乙個***.dump檔案;
4.將生成的dump檔案放在release/debug路徑下,具體看你使用什麼方式編譯的,就放到對應的目錄下;
5.雙擊生成的dump檔案,缺省會用你編寫**的ide開啟,如果找不到開啟方式,那麼指定用你的ide開啟即可;
6.開啟以後直接啟動除錯,就可定位到出錯的**行;
int main(int argc, char **argv)
{brwinmaincrtstartup();
ctime now;
now = ctime::getcurrenttime();
cstring strtime = now.format("%y-%m-%d %h:%m:%s");
checkfactorex2(strtime, 1);
cout << strtime << endl;
system("pause");
return 0;
上面的**就是在程式的入口處新增了brwinmaincrtstartup()
方法,接著我在checkfactorex2方法裡面做乙個空指標賦值的操作
char *str = null;
strcpy(str, "sa");
編譯執行;
結果程式出現異常結束,此時在debug路徑下多了乙個檔案如下圖:
這個sleep.exe_(null)_31367511.dmp檔案就是程式奔潰以後生成的檔案,此時只要雙擊開啟該dump檔案,並且啟動除錯以後,就能精確定位到出錯的**行,如下圖:
如上圖是開啟dump檔案以後;
如上圖,就是定位到了我設定的空指標賦值的地方,這就是出錯的位置;
注意:有時候dump檔案可能定位到彙編檔案中去,如些圖所示:
此時開啟呼叫堆疊,依次向外跟,就能夠找到出錯的地方了;
C 生成dump檔案,除錯dump檔案
dump 檔案是程序的記憶體映象 可以把程式的執行狀態通過偵錯程式儲存到dump檔案中 dump 檔案是用來給驅動程式編寫人員除錯驅動程式用的 這種檔案必須用專用工具軟體開啟 比如使用 windbg visualstudio開啟 當我們的程式發布出去之後 在客戶機上是無法跟蹤自己 的 bug 的 所...
如何除錯崩潰dump檔案
其實除錯dump檔案很簡單,雙擊自動開啟vc然後f7執行。但是中間要注意很多事情。1。dump檔案放在 dump檔案不用非要放在你編譯出來的位置,你完全可以建立乙個新的資料夾來放它。2。要恢復當時的現場 可能你要問,怎麼可能,這個dump檔案可是使用者發給我的,我不可能去使用者家裡除錯吧?這個恢復現...
C 程式儲存dump檔案
程式異常崩潰前使用此類為程序建立dump檔案,之後可以使用windbg等工具進行分析。using system using system.diagnostics using system.io using system.runtime.interopservices namespace infras...