gcc編譯器與gdb調試器
編譯過程可分爲四個階段:
- 預處理(Pre-Processing)
- 編譯(Compiling)
- 彙編(Assembling)
- 鏈接(Linking)
gcc文件類型約定規則:
gcc常用選項:
常用的有 -o -c -S -E -g -O
**預處理:*在預處理階段,gcc把預處理命令掃描處理完畢,輸入C語言的源文件,通常爲.c
它們通常帶有.h之類的頭文件的包含文件,這個階段主要處理源文件中的#ifdef#include和#define等預處理命令,該階段會生成一箇中間文件*.i,可以使用-E生成中間文件.i
gcc -E hello.c -o hello.i
**編譯:*gcc把預處理後的結果編譯成彙編或者目標模塊,輸入的中間文件 * .i,編譯後生成彙編語言文件.s
gcc -S hello.i -o hello.s
**彙編:*彙編階段,編譯器把編譯出來的結果彙編成具體CPU上的目標代碼模塊,輸入彙編文件 * .s,輸出機器語言.o
gcc -c hello.s -o hello.o
**鏈接:*在鏈接階段把多個目標代碼模塊連接成一個大的目標模塊,輸入機器代碼文件, .o,彙集成一個可執行的二進制代碼文件。
gcc hello.o -o hello
優化gcc
編譯器通過分析源代碼,找出其中尚未達到最優的部分,然後對其進行重新組合,改善程序的執行性能。
gcc -On
gcc -O2 常用
gcc -O0 不進行優化
調試選項
默認情況下,gcc在編譯時不會建個調試符號插入到生成的二進制代碼中,如果需要生成調試符號信息,可以使用gcc -g選項,一般不加調試選項,否則會使代碼增大。
gdb調試器
功能表:
- 設置斷點
- 單步執行程序,便於調試
- 查看程序中變量值的變化
- 動態改變程序的執行環境
- 分析崩潰程序產生的core文件
設置斷點
break 4
break main
單步執行程序
step 步入
next 下一行
查看運行時的數據 print display
print <expr>
print/<f> <expr>
display 可以設置一些自動顯示的變量,當程序停住時,或是在單步跟蹤時,這些變量會自動顯示,相關的gdb命令是display,格式如下
display<expr>
display/<fmt><expr>
display/<fmt><addr>
查看源程序
1、顯示源代碼
gdb可以打印出所調試程序的源代碼,編譯時一定要加上-g參數,用list來顯示源代碼
2、源代碼內存
info line命令查看源代碼在內存中的地址