【科技友瘋狂】GDB 超硬派實戰教學:不靠 printf 也能神級除錯!

關鍵字 :全端工程師修煉日記debugGDB

你是不是習慣用 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 + 多檔案、大型專案實戰技巧

  1. break file.c:25 → 在特定檔案與行號設斷點

  2. info locals → 查看所有區域變數

  3. display var → 每次暫停時自動顯示變數值

  4. watch var → 監控變數值的變化(極好用!)

這些功能對大型專案除錯尤其有用,不用再迷失在 5000 行程式碼中!


六、GDB + Core Dump 除錯崩潰檔案(資深工程師必備技能)

ulimit -c unlimited
./main

當程式崩潰時會產生 core 檔案,你可以用 GDB 還原現場:

gdb ./main core
(gdb) bt

? 這是診斷 crash 與記憶體錯誤的神技!


七、結語:為什麼 GDB 是你應該掌握的底層工具?

  • ✅ 它讓你不用再亂印變數

  • ✅ 它能讓你從崩潰的程式中精準還原真相

  • ✅ 它是進入嵌入式開發、作業系統開發、Driver 調試的必備技能

你不能只當會寫程式的工程師,更要成為會除錯的工程師。


? 你會用 GDB 嗎?還是依賴 printf() 到天荒地老?


留言分享你最痛苦的除錯經驗,讓我們一起升級成真正的系統工程師!?

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論