偵錯程式gdb
一、啟動和退出gdb
gdb除錯的物件是可執行檔案,而不是程式的源**。如果要使乙個可執行檔案可以被gdb除錯,那麼在使用編譯器gcc編譯程式時需要加入-g選項。gdb除錯乙個程式的命令格式是:
gdb
程式檔名
也可以在linux提示符下,直接輸入gdb,然後使用file命令裝入要除錯的程式:
file
程式檔名
如果要結束除錯,使用quit
命令就可以退出gdb,返回到linux的提示符。
二、顯示和查詢源程式**
list命令用於列出程式的源**,它的使用格式如下:
1.list:顯示10行**,若再次執行該命令則顯示接下來的10行**。
2.list 5,10:顯示第5行到第10行的**。
3.list get_sum:顯示get_sum函式周圍的**。
另外,如果要在除錯過程中執行linux命令,則可以在gdb的提示符下輸入shell命令。例如:
shell ls
三、開始除錯
1.使程式開始執行:run
注:使用gdb
程式檔名或file
程式檔名只是裝入程式,程式並沒有執行。
2.設定和管理斷點 1)
以行號設定斷點,例如:
break 7
2)以函式名設定斷點,例如:
break get_sum
3)以條件表示式設定斷點,命令格式是:break
行號或函式名
if 條件,例如:
break 7 if i==99
還有一種以表示式設定斷點的方法,這種設定方式不需要指定行號或函式名,而是在整個程式執行中當條件表示式的值發生改變時程式會暫停下來。命令格式是:watch
條件表示式
4)檢視當前設定的中斷點,使用info breakpoing
命令。
5)使中斷失效或有效,使用disable
斷點編號命令可以使某個斷點失效。使用enable
斷點編號命令可以使某個斷點恢復有效。 6)
刪除斷點,disable只是讓某個斷點暫時失效,斷點依然存在於程式中。如果要徹底刪除某個斷點,可以使用clear或delete命令。命令格式如下所示: ø
clear 行號:刪除此行的斷點。
øclear函式名:刪除該函式的斷點。
ødelete 斷點編號:刪除指定編號的斷點。如果一次要刪除多個斷點,各斷點編號以空格隔開。
三、檢視和設定變數的值
1.print命令
print命令一般用來列印變數或表示式的值,也可以用來對某個變數進行賦值。其使用格式為:
øprint 變數或表示式:列印變數或表示式當前的值。
øprint 變數=值:對變數進行賦值。
2.whatis命令
whatis命令用來顯示某個變數或表示式值的資料型別。格式如下:
whatis
變數或表示式
3.display命令
在單步執行時將非常有用,使用
display
命令設定乙個表示式後,它將在每次單步進行指令後,緊接著輸出被設定的表示式及值。格式如下:
display
變數或表示式
4.backtrace 命令
用於檢視函式堆疊。
四、控制程式的執行
1.continue 命令
讓程式繼續執行,知道下乙個斷點或執行完為止。 2.
kill命令
將強行終止當前正在除錯的程式。 3.
next和step命令
用於單步除錯,對於step命令,如果有函式呼叫,則進入函式。與命令step不同,next是不進入呼叫的函式的。
五、練習
練習1 下面這個程式是否有問題?
#include
#define max 255
int main()
gdb偵錯程式
在使用gdb偵錯程式之前,必須在編譯程式時加上 g選項 功能 顯示上次內容之前或之後的10行內容,首次使用顯示main 函式之前或之後的10行內容 命令 list 簡稱 l 功能 顯示引數行之前和之後的10行內容.命令 list line number 簡稱 l 10 功能 顯示原始檔從一行到另一行...
gdb偵錯程式
gdb是gnu發布的一款強大的除錯功能 gdb主要完成下面三個方面的功能 1 啟動被除錯程式 2 讓被除錯的程式在指定的位置停住 3 當程式停住時,可以檢視程式的狀態 變數值 gcc g test.c o test 生成除錯資訊 gdb test 啟動gdb gdb除錯工具相關命令 gdb run ...
Gdb 偵錯程式
除錯是所有程式設計師都會面臨的問題。如何提高程式設計師的除錯效率,更好更快地定位程式 中的問題從而加快程式開發的進度,是大家共同面對的。就如讀者熟知的 windows 下的一些 除錯工具,如 vc 自帶的如設定斷點 單步跟蹤等,都受到了廣大使用者的讚賞。那麼,在 linux 下有什麼很好的除錯工具呢...