Linux 內建完整的 C/C++ 開發工具鏈。本文系統介紹:GCC 編譯選項 (最佳化 -O/-O2、除錯 -g、剖析 -pg);GDB 互動式除錯器 (斷點、單步、監看、堆疊檢視) 含實戰除錯範例;xxgdb 圖形介面;calls/calltree 函式呼叫樹產生器;cproto 自動產生函式原型;indent 程式碼美化排版;gprof 效能剖析器。掌握這套工具鏈,讓 Linux 開發事半功倍。
gcc -o myprog myprog.c # 編譯連結產出 myprog
gcc -c myprog.c # 僅編譯產出 myprog.o
gcc -S myprog.c # 產生組語 myprog.s
gcc -E myprog.c # 僅前置處理輸出 stdout
gcc -g -o myprog myprog.c # 含除錯資訊 (可搭配 -O)
gcc -O2 -o myprog myprog.c # 最大最佳化
gcc -pg -o myprog myprog.c # 插桩產生 gmon.out 供 gprof
gcc -g -o hello hello.c 編譯含除錯資訊。gdb hello 進入 GDB。(gdb) break 26 在可疑行設斷點。(gdb) run 執行至斷點。(gdb) watch string2[size - i] 監看關鍵變數。(gdb) next 單步執行觀察變化。string2[size - i] 索引錯誤導致首字元為空,修正為 size - 1 - i。常用指令:list、print、backtrace、info locals、frame。
| 工具 | 用途 | 範例 |
|---|---|---|
| xxgdb | GDB 圖形前端 | xxgdb hello |
| calls | 函式呼叫樹 | calls hello.c → 顯示 main → my_print → printf... |
| calltree | 呼叫樹+詳細資訊 | calltree hello.c |
| cproto | 自動產生 .h 原型 | cproto hello.c > proto.h |
| indent | 程式碼排版美化 | indent -kr hello.c (K&R 風格) |
| gprof | 效能剖析 | gcc -pg ... && ./a.out && gprof a.out |
Flat profile:
% cumulative self self total
time seconds seconds calls us/call us/call name
69.23 0.09 0.09 1 90000 103333 my_print2
30.77 0.13 0.04 3 13333 13333 count_sum
self seconds:函式本身耗時 (不含呼叫子函式)。cumulative:含子函式累計耗時。self seconds 高或 calls 多且 us/call 高的函式。善用工具鏈,從編寫、除錯、美化、剖析到優化,構建專業 Linux 開發工作流。