linux下用gdb除錯c程式

jiangzhengdong發表於2013-03-21

首先要用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

相關文章