c 程式崩潰生成dump檔案確定錯誤位置方法

2021-08-08 11:40:12 字數 1504 閱讀 8280

在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...