你是不是習慣用 printf() 來追 Bug?
但當程式爆炸、Segmentation fault、記憶體錯誤接二連三出現時,你可能只剩下一句話:
「我到底哪裡寫錯了!?」
如果你正在寫 C/C++,想要成為真正的系統工程師,你就必須會用 GDB!
一、什麼是 GDB?
GDB(GNU Debugger)是 Linux/C/C++ 開發中最強大的除錯工具之一,能夠做到:
✅ 單步執行(Step-by-step)
✅ 即時觀察變數值
✅ 設斷點、檢查記憶體內容
✅ 追蹤程式崩潰原因(Backtrace)
最重要的是——不用再瘋狂加 printf 了!
二、準備除錯:加上 -g 編譯參數
要使用 GDB 進行除錯,你的程式必須在編譯時加入除錯資訊:
gcc -g main.c -o main
這樣才會保留行號、變數名稱等資訊,GDB 才能精準對應原始碼。
三、基本用法:第一行指令就上手!
gdb ./main
進入 GDB 後,你可以使用這些指令:
| 指令 | 功能 |
|---|---|
run |
執行程式 |
break main |
在 main 函式設置斷點 |
next |
執行下一行(不進入函式) |
step |
執行下一行(會進入函式) |
print x |
印出變數 x 的值 |
bt |
顯示當前函式呼叫堆疊(Backtrace) |
quit |
離開 GDB |
四、爆炸場景一:Segmentation fault 怎麼辦?
? 原始碼(bug.c)
int *ptr = NULL;
*ptr = 10;
編譯與執行:
gcc -g bug.c -o bug
./bug # Segmentation fault
使用 GDB 找出問題:
gdb ./bug
(gdb) run
(gdb) bt
你會看到哪一行造成了錯誤,甚至能用:
(gdb) list
直接看到原始碼段落!
五、GDB + 多檔案、大型專案實戰技巧
-
break file.c:25→ 在特定檔案與行號設斷點 -
info locals→ 查看所有區域變數 -
display var→ 每次暫停時自動顯示變數值 -
watch var→ 監控變數值的變化(極好用!)
這些功能對大型專案除錯尤其有用,不用再迷失在 5000 行程式碼中!
六、GDB + Core Dump 除錯崩潰檔案(資深工程師必備技能)
ulimit -c unlimited
./main
當程式崩潰時會產生 core 檔案,你可以用 GDB 還原現場:
gdb ./main core
(gdb) bt
? 這是診斷 crash 與記憶體錯誤的神技!
七、結語:為什麼 GDB 是你應該掌握的底層工具?
-
✅ 它讓你不用再亂印變數
-
✅ 它能讓你從崩潰的程式中精準還原真相
-
✅ 它是進入嵌入式開發、作業系統開發、Driver 調試的必備技能
你不能只當會寫程式的工程師,更要成為會除錯的工程師。
? 你會用 GDB 嗎?還是依賴 printf() 到天荒地老?
留言分享你最痛苦的除錯經驗,讓我們一起升級成真正的系統工程師!?
評論