gdb(GNU symbolic debugger)是一個由GNU開源組織發佈的、UNIX/LINUX操作系統下的、基於命令行的、功能強大的程序調試工具。
start #開始調試,停在第一行代碼處,(gdb)start l #list的縮寫查看源代碼,(gdb)l b <lines> #b: Breakpoint的簡寫,設置斷點。(gdb) b 8 b <func> #b: Breakpoint的簡寫,設置斷點。(gdb) b main i breakpoints #i:info 的簡寫。(gdb)i breakpoints d [bpNO] #d: Delete breakpoint的簡寫,刪除指定編號的某個斷點,或刪除所有斷點。斷點編號從1開始遞增。(gdb)d 1 s #s: step執行一行源程序代碼,如果此行代碼中有函數調用,則進入該函數;(gdb) s n #n: next執行一行源程序代碼,此行代碼中的函數調用也一併執行。(gdb) n r #Run的簡寫,運行被調試的程序。如果此前沒有下過斷點,則執行完整個程序;如果有斷點,則程序暫停在第一個可用斷點處。(gdb) r c #Continue的簡寫,繼續執行被調試程序,直至下一個斷點或程序結束。(gdb) c finish #函數結束 p [var] #Print的簡寫,顯示指定變量(臨時變量或全局變量 例如 int a)的值。(gdb) p a display [var] #display,設置想要跟蹤的變量(例如 int a)。(gdb) display a undisplay [varnum] #undisplay取消對變量的跟蹤,被跟蹤變量用整型數標識。(gdb) undisplay 1 set args #可指定運行時參數。(gdb)set args 10 20 show args #查看運行時參數。 q #Quit的簡寫,退出GDB調試環境。(gdb) q help [cmd] #GDB幫助命令,提供對GDB名種命令的解釋說明。如果指定了“命令名稱”參數,則顯示該命令的詳細說明;如果沒有指定參數,則分類顯示所有GDB命令,供用戶進一步瀏覽和查詢。(gdb)help 回車 #重複前面的命令,(gdb)回車
test.c
int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int main(void) { char buf[] = "helloworld"; int a = 3; int b = 5; int c = 0; c = add(a, b); printf("%s a+b=%d\n", buf, c); c = sub(a, b); printf("%s a-b=%d\n", buf, c); c = mul(a, b); printf("%s a*b=%d\n", buf, c); return 0; }
編譯的時候需要加上-g參數
gcc -o test -g test.c gdb test