gdb即gnu debugger。
gcc編譯選項-g,這樣生成的目標**中就新增了除錯資訊。
gcc -g –o hello hello.c
gdb完成的大部分工作都可以用很少的命令集合完成。
啟動gdb
gdb 程式名 [corefile]
corefile是可選的,但能增強gdb的除錯能力。
linux預設是不生成corefile的,所以需要在使用者profile檔案中新增
ulimit -c unlimited
修改完成之後讓profile檔案及時生效
乙個有錯的程式
#include
void test(void)
int main(void)
編譯這個程式
gcc –g –o hello hello.c
執行hello
segmentation fault (core dumped)
程式崩潰
ls core.3563 hello hello.c
我們看到除了hello檔案和hello.c檔案之外多了core檔案
啟動gdb我們做的第一件事就是在gdb環境中執行這個程式
gdb hello
run命令。
starting program: /home/test/1/hello
hello world
program received signal sigsegv, segmentation fault.
0x08048394 in test () at hello.c:5
5 *i = 2;
gdb不但能顯示出錯行號,還能說明出錯出現時的記憶體位址,這個也是潛在的有用資訊。
test函式到底出了什麼問題?
where命令,顯示導致段錯誤的執行函式樹
0 0x08048394 in test () at hello.c:5
1 0x080483be in main () at hello.c:11
問題出在hello.c檔案的第5行。
知道函式出錯行的上下文對除錯程式是很有幫助的。
list[m,n],m,n是要顯示包含錯誤首次出現位置的起始行和結尾行。不帶引數的list將顯示附近的10行**
gdb最有用的功能之一就是它可以顯示被除錯程式中任何表示式、變數的值。
print 變數,表示式。
print 『file』::變數,表示式,『』是必須的,以便讓gdb知道指的是乙個檔名。
print funcname::變數,表示式
(gdb) print i
$1 = (int *) 0x0
顯示指標變數i的值為0。
whatis 命令可以告訴你變數的型別, ptype 告訴你結構的定義。
(gdb) whatis i
type = int *
break命令設定斷點
break linenum
break funcname
break filename:linenum
break filename:funcname
退出gdb,重新進入除錯模式
gdb -q hello
(gdb) break 4
breakpoint 1 at 0x804838a: file hello.c, line 4.
(gdb) run
starting program: /home/test/1/hello
hello world
breakpoint 1, test () at hello.c:4
4 int *i = null;
gdb在第4行停止。
continue命令從斷點以後繼續執行。
delete刪除乙個斷點。
如果設定了很多斷點,忘記了哪些斷點已經觸發,可以使用info break。
(gdb)info break
num type disp enb address what
1 breakpoint keep y 0x0804838a in test at hello.c:4
breakpoint already hit 1 time
改變乙個變數的值。
set variable varname = value
varname是變數名稱,value是變數的新值。
單步除錯
step命令
當遇到乙個函式的時候,step將進入函式,每次執行一條語句,相當於step into
next命令
當遇到乙個函式的時候,next將執行整個函式,相當於step over
return [value]命令
停止執行當前函式,將value返回給呼叫者,相當於step return
如果需要重複執行一條命令,不需要每次都鍵入命令,gdb記住了最後乙個被執行的命令,只要簡單的按enter鍵就可以重複執行最後的命令
更多詳情參考:
linux gdb 程式除錯工具使用詳解
Linux的GDB除錯技術
hchen test 補充gdb除錯中動態顯示執行的 在gdb除錯中,大家都知道使用list命令來顯示 例如 顯示main.c中的main函式附近的 list main.c main 顯示main函式附近的 list main 顯示main.c中的第2到20行的 list main.c 2,20 顯...
Linux除錯技術GDB命令
一 常規除錯 gdb是linux下常用的程式除錯工具,當然前提是用gcc g 編譯時加上 g引數,這樣編譯出的可執行程式會加上gdb除錯資訊。gdb命令不少,但常用的主要包括如下命令 1 list file functuon 命令縮寫是l,檢視原始碼,不加引數時,向下顯示原始碼,加引數 l時,向上顯...
GDB除錯技術
gnu的偵錯程式稱為gdb,該程式是乙個互動式工具,工作在字元模式。在 x window 系統中,有乙個gdb的前端圖形工具,稱為xxgdb。gdb 是功能強大的除錯程式,可完成如下的除錯任務 設定斷點 監視程式變數的值 程式的單步執行 修改變數的值。在可以使用 gdb 除錯程式之前,必須使用 g ...