溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

記一次core 文件調試

發布時間:2020-06-28 13:34:48 來源:網絡 閱讀:334 作者:CLEVERlBOY 欄目:編程語言

無論是linux系統,還是windows系統,我們都有可能因為各種原因導致程序崩潰,那么這種情況下如何確認崩潰在哪了呢?

windows系統

這里是采用windows的api來產生dump文件

產生minidump的方法,網上都有,可以搜一下。

#include "DumpManager.h"

void main()
{
    DumpManager dump_manager(true);
    char* p = NULL;
    memcpy(p, "Hello", strlen("Hello"));
}

注:這里的DumpManager.h是崩潰后生成dump的文件

崩潰后的樣子,可能不同的人寫出來的形式不一樣,或者彈出小窗,或者直接打印,或者發送監控消息給客戶端,看自己實現吧!這里我采用直接打印:
記一次core 文件調試

調試開始前的準備:
記一次core 文件調試
這里的優化一定要關掉,否則會導致dunp文件里面的調試信息和代碼對不上。

記一次core 文件調試
如果程序有可能產生windows底層的異常,這里也一定要切換

記一次core 文件調試
因為dump文件要和pdb一起使用,所以這里一定要生成pdb文件,否則一切白搭。

開始調試:
程序崩潰后,程序運行目錄下面會生成dump文件,這個文件名由自己生成dump的函數決定。
記一次core 文件調試
這個時候,只需要用VS直接打開dump文件,就會進入到VS的調試界面
記一次core 文件調試
對著畫線的部分,右鍵然后進入調試狀態,這里兩個選項可以隨便選:
記一次core 文件調試
注意:如果這里出現一些識別不了的dll函數,就需要將對應的dll以及pdb拷貝過來,如果dll是操作系統里面的,只需要從微軟的服務器下載就可以了。
這里彈出的框里面會提示異常的信息,指針指向的地方就是崩潰的位置。然后就和本地的程序調試一樣,看各個值就可以了,這里不再贅述了。

Linux系統
調試開始前要準備的工作:開啟生成核心文件(一次執行只對一個終端窗口有效,所以一旦終端關閉,就需要重新執行)
命令如下:
ulimit -c unlimited 這里是不限制core文件的大小,也可以限制core文件的大小,這個自行搜索吧!

代碼如下:

 #include <stdio.h>
#include <stdlib.h>

void main()
{
   int i = 0;
   char* pTmp = NULL;
   printf("%d\n", *pTmp);
   return;
}

編譯,執行:
記一次core 文件調試
這里據說編譯的時候必須加上-g 選項,否則用gdb調試的時候就會定位不到源代碼,只能定位到二進制的地址。

運行程序以后,會在程序運行目錄下生成一個core文件:
記一次core 文件調試

調試開始:
記一次core 文件調試
輸入gdb 程序名 core文件名 就可以調試了,這里輸出了一堆的信息,太多不想看?繼續輸入bt試試:
記一次core 文件調試
就這樣可以定位到問題了。

通過對比還是可以發現linux下調試還是要比windows好用,不同的操作系統。dll都不一樣,然后我們就必須拷dll到我們的輸出目錄下,很麻煩。就這樣了,over。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女