首先要用gdb調試C/C++程序的話,得在編譯時將調試信息添加到可執行文件中,使用gcc的 -g參數便可以做到這點。如:
gcc -g -Wall -o test test.c
編譯完後邊要啓動gdb,方法如下:
$gdb test
如果對gdb的命令不熟,可通過help來查詢,如下:
(gdb)help
gdb 的命令很多,gdb把之分成許多個種類。help命令只是例出gdb的命令種類,如果要看種類中的命令,可以使用help <class> 命令,如:help breakpoints,查看設置斷點的所有命令。也可以直接help <command>來查看命令的幫助。
gdb中,輸入命令時,可以不用打全命令,只用打命令的前幾個字符就可以了,當然,命令的前幾個字符應該要標誌着一個唯一的命令,在Linux下,你可以敲擊兩次TAB鍵來補齊命令的全稱,如果有重複的,那麼gdb會把其列出來。
使用list命令可以查看應用程序的源碼,如下:
(gdb)list 或者(gdb)list n1,n2 //列出n1和n2行之間的代碼
添加斷點
(gdb)break main
斷點設置還有其他方法,如下:
命令 斷點方式
break function 在函數上設置一個斷點break file:function 在指定文件的函數上設置一個斷點
break line 在指定行號的行設置斷點
break file:line 在指定文件的指定行號設置斷點
break address 在一個物理地址設置斷點
查看斷點信息
(gdb)info breakpoints
移除斷點
(gdb)clear 11(11爲我斷點設置的行號)
設置斷點後然後執行:
(gdb)run
run命令啓動應用程序,然後達到設置的第一個斷點後,便會顯示出下面將要執行的一行代碼
關於斷點的設置,其實還有一種斷點設置方法便是條件斷點,條件成立才添加斷點,如下:
(gdb)break test if op==5 //如果參數op等於5,則再函數test處添加斷點。
單步調試
單步調試有如下幾個命令
next、step、continue
next表示執行下一行,不進入函數體,相當於一般圖形化的調試程序的step over
step 表示執行下一行,進入函數體,相當於圖形界面的step into
continue 表示繼續執行程序直到下一個斷點
其實hia可以在next和step命令後面添加一個數值,表示這個命令執行的次數,eg:step5,表示執行5次step命令
監控變量
使用display命令來查看變量的值,如:
(gdb)display array[0] //查看數組中第一個元素的值
設置變量
gdb也可以在調試過程中設置變量的值,使用set命令即可完成,如下:
(gdb)set array[8]=100 //設置數組array[8]值爲100
檢查堆棧
使用backtrace命令可以查看堆棧中的情況,獲得當前函數的壓棧情況,如:
(gdb)backtrace