GDB 用法和命令介紹
阿新 • • 發佈:2019-02-01
一、GDB常用命令簡介
r | run | 執行.程式還沒有執行前使用 |
c | cuntinue | 執行到下一斷點處 |
q | quit | 退出 |
tab | tab | 命令補全功能 |
h | help | 幫助 |
s | step | 跟入函式 |
n | next | 執行下一行的程式碼。如果是函式呼叫,也當作一行程式碼,執行到此函式返回 |
b | breakpoint |
設定斷點,用法:(1)b 函式名 (2)b 檔名:行號 |
info b | info breakpoints | 檢視斷點數 |
del | delete | 刪除斷點:delete 斷點號 |
l | list | 列出程式碼行。一次列10 行。 也可在 list 後面跟上 檔名:行號 |
watch | watch | 觀察一個變數的值。每次中斷時都會顯示這個變數的值 |
what | what | 顯示變數的型別 |
p | 列印一個變數的值。print 也可改變一個值,通過指令 p b = 100,變數b 的值就變成100了 | |
start | start | 從主函式 main 開始執行除錯 |
fin | finish | 執行直至當前函式返回 |
二、GDB命令詳解
和所有常用的除錯工具一樣,gdb提供了以下功能:# 監視程式中變數的值# 在程式中設定斷點# 程式的單步執行
在使用gdb前,必須先載入可執行檔案,因為要進行除錯,檔案中就必須包含除錯資訊,所以在用gcc或cc編譯時就需要用-g引數來開啟程式的除錯選項。
除錯開始時,必須先載入要進行除錯的程式,可以用以下兩種方式:* 在啟動gdb後執行以下命令:file 可執行檔案路徑* 在gdb啟動時就載入程式:gdb 可執行檔案路徑
載入程式後,接下來就是要進行斷點的設定,要監視的變數的新增等工作,下面對在這個過程中常會用到的命令逐一進行介紹:* list:顯示程式中的程式碼,常用使用格式有:list
輸出從上次呼叫list命令開始往後的10行程式程式碼。list -
輸出從上次呼叫list命令開始往前的10行程式程式碼。list n
輸出第n行附近的10行程式程式碼。list function
輸出函式function
設定遇到最後一個遇到的斷點時要執行的命令commands n
設定遇到斷點號n時要執行的命令 注意,commands後面跟的是斷點號,而不是斷點所在的行號。 在輸入命令後,就可以輸入遇到斷點後要執行的命令,每行一條命令,在輸入最後一條命令後輸入end就可以結束輸入。* delete:清除斷點或自動顯示的表示式。使用格式:delete 斷點號* disable:讓指定斷點失效。使用格式:disable 斷點號列表 斷點號之間用空格間隔開。* enable:和disable相反,恢復失效的斷點。使用格式:enable 斷點編號列表* ignore:忽略斷點。使用格式:ignore 斷點號忽略次數* condition:設定斷點在一定條件下才能生效。使用格式:condition 斷點號條件表示式* cont/continue:使程式在暫停在斷點之後繼續執行。使用格式:cont
跳過當前斷點繼續執行。cont n
跳過n次斷點,繼續執行。 當n為1時,cont 1即為cont。* jump:讓程式跳到指定行開始除錯。使用格式:jump 行號* next:繼續執行語句,但是跳過子程式的呼叫。使用格式:next
執行一條語句next n
執行n條語句* nexti:單步執行語句,但和next不同的是,它會跟蹤到子程式的內部,但不打印出子程式內部的語句。使用格式同上。* step:與next類似,但是它會跟蹤到子程式的內部,而且會顯示子程式內部的執行情況。使用格式同上。* stepi:與step類似,但是比step更詳細,是nexti和step的結合。使用格式同上。* whatis:顯示某個變數或表示式的資料型別。使用格式:whatis 變數或表示式* ptype:和whatis類似,用於顯示資料型別,但是它還可以顯示typedef定義的型別等。使用格式:ptype 變數或表示式* set:設定程式中變數的值。使用格式:set 變數=表示式set 變數:=表示式* display:增加要顯示值的表示式。使用格式:display 表示式* info display:顯示當前所有的要顯示值的表示式。* delete display/undisplay:刪除要顯示值的表示式。使用格式:delete display/undisplay 表示式編號* disable display:暫時不顯示一個要表示式的值。使用格式:disable display 表示式編號* enable display:與disable display相反,使用表示式恢復顯示。使用格式:enable display 表示式編號* print:列印變數或表示式的值。使用格式:print 變數或表示式 表示式中有兩個符號有特殊含義:$和$$。$表示給定序號的前一個序號,$$表示給定序號的前兩個序號。 如果$和$$後面不帶數字,則給定序號為當前序號。* backtrace:列印指定個數的棧幀(stack frame)。使用格式:backtrace 棧幀個數* frame:列印棧幀。使用格式:frame 棧幀號* info frame:顯示當前棧幀的詳細資訊。* select-frame:選擇棧幀,選擇後可以用info frame來顯示棧幀資訊。使用格式:select-frame 棧幀號* kill:結束當前程式的除錯。* quit:退出gdb。
如要檢視所有的gdb命令,可以在gdb下鍵入兩次Tab(製表符),執行“help command”可以檢視命令command的詳細使用格式。本文僅對使用gdb除錯過程中的一些常用指令的用法進行簡單地總結,如要獲取關於gdb的更詳細的資料,請參閱gdb的官方文件: