GDB中的命令固然很多,但我們只需掌握其中十個左右的命令,就大致可以完成日常的基本的程序調試工作。
命令 | 解釋 | 示例 |
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 (單步跟蹤進入)”; 這兩個命令必須在有源代碼調試信息的情況下才可以使用(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” 其中 $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 |