指令 | 描述 |
---|---|
backtrace(或bt) | 檢視各級函數調用及參數 |
finish | 連續運作到目前函數傳回為止,然後停下來等待指令 |
frame(或f) | 幀編号 選擇棧幀 |
info(或i) locals | 檢視目前棧幀局部變量的值 |
list(或l) | 列出源代碼,接着上次的位置往下列,每次列10行 |
list 行号 | 列出從第幾行開始的源代碼 |
list 函數名 | 列出某個函數的源代碼 |
next(或n) | 執行下一行語句 |
print(或p) | 列印表達式的值,通過表達式可以修改變量的值或者調用函數 |
quit(或q) | 退出gdb調試環境 |
set var | 修改變量的值 |
start | 開始執行程式,停在main函數第一行語句前面等待指令 |
step(或s) | 執行下一行語句,如果有函數調用則進入到函數中 |
指令 | 解釋 | 示例 |
file <檔案名> | 加載被調試的可執行程式檔案。 因為一般都在被調試程式所在目錄下執行GDB,因而文本名不需要帶路徑。 | (gdb) file gdb-sample |
r | Run的簡寫,運作被調試的程式。 如果此前沒有下過斷點,則執行完整個程式;如果有斷點,則程式暫停在第一個可用斷點處。 | (gdb) r |
c | Continue的簡寫,繼續執行被調試程式,直至下一個斷點或程式結束。 | (gdb) c |
b <行号> b <函數名稱> b *<函數名稱> b *<代碼位址> d [編号] | b: Breakpoint的簡寫,設定斷點。兩可以使用“行号”“函數名稱”“執行位址”等方式指定斷點位置。 其中在函數名稱前面加“*”符号表示将斷點設定在“由編譯器生成的prolog代碼處”。如果不了解彙編,可以不予理會此用法。 d: Delete breakpoint的簡寫,删除指定編号的某個斷點,或删除所有斷點。斷點編号從1開始遞增。 | (gdb) b 8 (gdb) b main (gdb) b *main (gdb) b *0x804835c (gdb) d |
s, n | s: 執行一行源程式代碼,如果此行代碼中有函數調用,則進入該函數; n: 執行一行源程式代碼,此行代碼中的函數調用也一并執行。 s 相當于其它調試器中的“Step Into (單步跟蹤進入)”; n 相當于其它調試器中的“Step Over (單步跟蹤)”。 這兩個指令必須在有源代碼調試資訊的情況下才可以使用(GCC編譯時使用“-g”參數)。 | (gdb) s (gdb) n |
si, ni | si指令類似于s指令,ni指令類似于n指令。所不同的是,這兩個指令(si/ni)所針對的是彙編指令,而s/n針對的是源代碼。 | (gdb) si (gdb) ni |
p <變量名稱> | Print的簡寫,顯示指定變量(臨時變量或全局變量)的值。 | (gdb) p i (gdb) p nGlobalVar |
display … undisplay <編号> | display,設定程式中斷後欲顯示的資料及其格式。 例如,如果希望每次程式中斷後可以看到即将被執行的下一條彙編指令,可以使用指令 “display /i pc”<br>其中 pc 代表目前彙編指令,/i 表示以十六進行顯示。當需要關心彙編代碼時,此指令相當有用。 undispaly,取消先前的display設定,編号從1開始遞增。 | (gdb) display /i $pc (gdb) undisplay 1 |
i | Info的簡寫,用于顯示各類資訊,詳情請查閱“help i”。 | (gdb) i r |
q | Quit的簡寫,退出GDB調試環境。 | (gdb) q |
help [指令名稱] | GDB幫助指令,提供對GDB名種指令的解釋說明。 如果指定了“指令名稱”參數,則顯示該指令的詳細說明;如果沒有指定參數,則分類顯示所有GDB指令,供使用者進一步浏覽和查詢。 | (gdb) help display |