如果你還在靠 printf() 抓 bug,那你需要的不是更多輸出,而是更聰明的方法。
GDB(GNU Debugger)是 C/C++ 工程師最強大的除錯利器,讓你能在命令列中:
-
單步執行程式
-
設斷點觀察程式進展
-
查看變數內容與記憶體狀態
-
追蹤 Segmentation fault 的發生點
本篇教學將帶你快速掌握 GDB 的入門技巧,用最實用的方式幫助你「看穿」程式執行的每一步。
一、GDB 是什麼?為什麼要學它?
GDB 是 GNU 系統提供的除錯工具,專為 C/C++ 程式設計而生。
它不像 IDE 那樣圖形化,卻能在命令列中提供更細緻的控制與觀察能力,特別適合:
-
嵌入式開發(無 GUI 環境)
-
Linux server 程式調試
-
低層記憶體與指標除錯
二、準備工作:先用 -g 編譯程式
你需要在編譯時加入 -g,才能在 GDB 中看到原始碼與變數名稱:
gcc -g main.c -o main
三、基本指令教學
啟動 GDB:
gdb ./main
進入後你可以使用以下指令:
| 指令 | 功能 |
|---|---|
run |
執行程式 |
break main |
在 main 函式設斷點 |
next |
執行下一行(不進入函式) |
step |
執行下一行(會進入函式) |
print x |
印出變數 x 的值 |
list |
顯示原始碼 |
bt |
顯示呼叫堆疊(backtrace) |
quit |
離開 GDB |
四、實例:除錯 Segmentation Fault
假設有以下程式:
int *ptr = NULL;
*ptr = 10;
執行會出現:
Segmentation fault (core dumped)
使用 GDB 除錯:
gdb ./main
(gdb) run
(gdb) bt
(gdb) list
你可以馬上定位是哪一行導致錯誤,還能追蹤呼叫順序與參數傳遞。
五、觀察變數與記憶體
(gdb) print x # 顯示變數 x 的內容
(gdb) print *ptr # 顯示指標指向的內容
(gdb) x/4xw ptr # 以十六進位格式讀取記憶體
六、實用技巧補充
-
使用
info locals查看目前作用域所有變數 -
使用
watch var監控變數變化 -
使用
display var每次停下來時自動顯示變數值 -
使用
core檔案分析崩潰現場(ulimit -c unlimited)
七、結語:學會 GDB,你就能真正理解程式的內部行為
GDB 是系統層工程師、嵌入式開發者、Linux 程式員的必備技能。
當你學會用 GDB,就能:
-
快速找出記憶體錯誤、Null pointer、錯誤傳參
-
有效觀察程式的流程與邏輯
-
提升除錯效率,減少不必要的 trial & error
評論