GCC 編譯與執行
# 編譯產生可執行檔
gcc -o myprog myprog.c
# 加入除錯資訊(-g)供 GDB 使用
gcc -g -o myprog.debug myprog.c
# 執行
chmod +x myprog
./myprog
GDB 基礎除錯流程
gdb ./myprog.debug # 載入帶除錯符號的執行檔
(gdb) list 1 # 顯示原始碼(預設 10 行)
(gdb) break 10 # 第 10 行設斷點
(gdb) info breakpoints # 查看所有斷點
(gdb) run # 開始執行,停在第一個斷點
(gdb) next # 單步執行(不進入函數)
(gdb) step # 單步進入函數
(gdb) continue # 繼續執行至下一個斷點
(gdb) print var_name # 印出變數值
(gdb) print/x addr # 以十六進位印出記憶體地址內容
(gdb) quit # 退出 GDB
常用 GDB 指令速查
| 指令 | 縮寫 | 功能 |
| break | b | 設斷點 |
| delete | d | 刪除斷點 |
| run | r | 執行程式 |
| continue | c | 繼續執行 |
| next | n | 下一行(step over) |
| step | s | 進入函數(step in) |
| print | p | 印變數/運算式 |
| display | disp | 每次停下自動印變數 |
| backtrace | bt | 呼叫堆疊 |
| frame | f | 切換堆疊幀 |
| watch | watch | 監視變數變化 |
記憶體查看
(gdb) x/10xw 0x7fffffffe000 # 以 10 個 4-byte 十六進位字顯示記憶體
(gdb) x/s 0x601080 # 以字串顯示
(gdb) x/i $pc # 反組譯下一條指令
進階建議
- IDE 整合:VS Code + C/C++ 擴充、CLion、Eclipse CDT、Qt Creator 皆內建 GDB 前端,視覺化除錯體驗更佳。
- 核心 Dump 分析:
ulimit -c unlimited 開啟 core dump,gdb ./prog core.xxx 事後分析崩潰現場。
- 遠端除錯:
gdbserver :1234 ./prog 目標機,target remote ip:1234 本地 GDB 連接。