系統級開發必備:GCC/G++ 四階段編譯流程、核心參數詳解、GDB 常用指令與實戰除錯範例。
cpp → .i 檔egcs → .s 組合語言as → .o 目標碼ld → 可執行檔| 參數 | 用途 | 範例 |
|---|---|---|
-x language | 強制指定語言,忽略副檔名 | gcc -x c hello.pig |
-c | 僅編譯至 .o,不連結 | gcc -c hello.c |
-S | 僅產生 .s 組合碼 | gcc -S hello.c |
-E | 僅預處理,輸出導向檔案 | gcc -E hello.c > out.txt |
-o file | 指定輸出檔名 | gcc -o hello.exe hello.c |
-O0 ~ -O3 | 優化等級 (0 無、3 最高) | gcc -O2 hello.c |
-g | 產生除錯資訊 (GDB 專用建議 -ggdb) | gcc -ggdb hello.c |
-I dir | 新增標頭檔搜尋路徑 | gcc -I/my/include hello.c |
-L dir | 新增庫搜尋路徑 | gcc -L/my/lib -lmylib hello.c |
-l lib | 連結指定庫 | gcc -lcurses hello.c |
-static | 靜態連結,無需動態庫 | gcc -static hello.c |
-shared | 動態連結,產出較小 | gcc -shared hello.c |
| 指令 | 功能 |
|---|---|
break N | 第 N 行設中斷點 |
bt | 顯示呼叫堆疊 |
continue | 繼續執行 |
display expr | 每次停下顯示運算式值 |
print expr | 印出運算式值 |
next | 單步執行 (不進入函數) |
list | 顯示原始碼片段 |
info locals | 顯示區域變數 |
set var x=5 | 修改變數值 |
錯誤程式 bugging.c:未初始化指標 string 導致 Segmentation Fault。
gcc -g -o bugging bugging.c 編譯含除錯資訊。gdb bugging 進入調試器。run 執行至崩潰。where (或 bt) 定位崩潰行 (gets(string))。print string 發現值為隨機記憶體位址。break 11。run 重跑至中斷點。set var string = buff 指向合法緩衝區。continue 程式正常結束。掌握 GCC/GDB 工具鏈,是 C/C++ 開發者的核心基本功。