c++程序崩潰生成dump文件確定錯誤位置方法

在c++程序開發過程中,會經常遇到程序崩潰的情況,此時如果說程序代碼行數較少的情況下,可直接通過調試代碼來確定錯誤位置,但是如果說是公司項目,代碼行數肯定少不了,此時通過單步跟蹤的方法來查找bug的話,就有點困難了。

此時可藉助c++提供的生成dump文件的方法來確定程序的錯誤位置。

首先是要包含生成dump的類,這裏就如何添加代碼生成dump文件做一些介紹:

首先就是先把生成dump的類包含到當前項目下,我用的是BRExceptionFilter類(下載地址:http://download.csdn.net/download/github_37567324/9985776),

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文件可能定位到彙編文件中去,如些圖所示:

此時打開調用堆棧,依次向外跟,就能夠找到出錯的地方了;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章