GDB (GNU Debugger) 是 Linux 下最強大的命令列偵錯工具。本文系統整理常用指令、操作流程與多執行緒偵錯技巧,助你快速定位程式錯誤。
gcc -g program.c -o program # 或 g++ -g
# -g 參數嵌入符號表與行號資訊,GDB 才能對應原始碼
| 指令 | 縮寫 | 功能 | 常用範例 |
|---|---|---|---|
| list | l | 顯示原始碼(預設 10 行) | list main, list 20, list - |
| break | b | 設定中斷點 | break 15, break func, break file.c:20 |
| run | r | 啟動程式至中斷點 | run arg1 arg2 |
| next | n | 單步執行(不進入函式) | 類似 VS F10 |
| step | s | 單步執行(進入函式) | 類似 VS F11 |
| continue | c | 繼續執行至下一中斷點 | |
| p | 列印變數值 | p var, p *ptr, p/x addr | |
| backtrace | bt | 查看呼叫堆疊 | bt full 含區域變數 |
| info | i | 查看偵錯資訊 | info break, info locals, info threads |
| edit | e | 編輯當前行原始碼 | |
| whatis | 查看變數型別 | whatis var | |
| help | h | 指令說明 | help break |
| quit | q | 離開 GDB |
gdb ./program:偵錯可執行檔。gdb ./program core:事後分析 core dump。run 開始執行。在 GDB 內直接輸入 make 重新編譯,GDB 會自動重新載入符號表,**保留已設定的中斷點**,極大提升效率。
| 指令 | 縮寫 | 功能 |
|---|---|---|
| info threads | info thr | 列出所有可偵錯執行緒,* 表當前執行緒 |
| thread ID | thr ID | 切換至指定 ID 執行緒 |
| thread apply ID1 ID2 cmd | thr apply | 讓指定執行緒執行 cmd |
| thread apply all cmd | thr apply all | 讓所有執行緒執行 cmd(如 bt) |
| set scheduler-locking off|on|step | 控制單步時其他執行緒行為 |
off(預設):所有執行緒並發執行。on:僅當前執行緒執行,其他凍結。step:單步時(除 next 跨函式外)僅當前執行緒執行,適合精準追蹤。display var:每次停下自動顯示變數值。watch expr:資料觀察點,表達式值改變即中斷。TUI 模式(Ctrl+X Ctrl+A)分割視窗顯示原始碼。