【科技友瘋狂】GDB 入門教學:用指令掌握每一行程式的生命軌跡

關鍵字 :全端工程師修煉日記GDB除錯工具C語言指令除錯

如果你還在靠 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

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

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

評論