GDB調試器與Core dump

GDB調試器與Core dump

GDB是Unix/Linux下的一款基於命令行的程序調試工具,其簡單的命令和強大的功能是衆多開發者喜歡的理由,搭配Core dump對一個程序進行追蹤則更能夠大顯身手。

前提條件:

一個程序如果想使用GDB調試,則需要在編譯過程中加入調試信息。命令如下:
gcc -g filename.c -o filename
使用 -g 參數,使得編譯的程序帶上調試信息,才能夠在gdb下得以調試。

GDB的基本使用:

GDB這款調試器的使用非常簡單明瞭,這裏筆者引用CSDN上Liigo的整理的一張表(感謝作者):
可以看到,我們通過 r 命令來啓動調試,通過 b 來設置斷點, n 來進行單步跳過,s 來進行單步執行,i b來顯示當前已設置的斷點,d 編號 來刪除斷點,p 變量名 來打印一個變量的值,set 變量名來設置變量的值,q來退出調試。瞭解了GDB的簡單實用,筆者就來介紹Core dump又是什麼。

Core dump:

Core dump是Unix/Linux下的核心轉儲,即當一個進程異常退出之前,將進程的用戶空間內存數據全部以文件方式保存到磁盤上,文件名則稱作是core,方便gdb的調試。系統默認是關閉的,我們需要執行命令設置轉儲的大小:
ulimit -c unlimited
設置核心轉儲的大小無限制,當然安全起見我們可以設置爲1024。如果需要關閉這個功能,則設置爲0。
我們將一個可能發生錯誤的程序,在gcc編譯的時候加上-g選項填入調試信息,然後打開了Core dump功能,當程序發生異常退出時,在程序當前文件夾下會生成一個名爲 core.編號 的文件,這個就是我們出錯的核心轉儲問文件。有了這個文件,我們就可以使用gdb來還原錯誤發生的位置和過程。命令如下:
gdb filename core.編號
然後我們就可以查看到發生錯誤的位置和信息,我們根據這個信息來找到bug並加以修復。筆者這裏不提供Linux上的實操圖,希望讀者自行測試,眼看千遍不如手過一遍。

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