使用GNU推出的基於C/C++的編譯器,是開放源代碼領域應用最普遍的編譯器,具備功能強大,編譯代碼支持性能優化等特色。
選項: -c:僅執行編譯操做,不進行鏈接操做; -o:指定生成的輸出文件; -wall:顯示警告信息; -E:僅執行編譯預處理; -S:將C代碼轉換爲彙編代碼; -g: 在編譯時產生調試信息,使用gdb工具時使用。c++
實例: 假設源程序文件名爲test.c性能優化
1. 預處理,.c文件 -> .i文件。 gcc -E test.c -o test.i
函數
2. 編譯,.i文件 -> .s文件。 gcc -S test.i -o test.s
將預處理過程生成的.i後綴的文件轉化成彙編文件,裏面存儲的是相應的彙編代碼,這個過程叫作編譯。工具
3. 彙編,.s文件 -> .o文件。 gcc -c test.s -o test.o
將彙編文件中的彙編代碼翻譯成相應的機器語言,這個過程叫作彙編。性能
4. 連接, .o文件 - 可執行程序 gcc test.o -o test
完成連接這個過程,它經過連接器ld將運行程序的目標文件和庫文件連接在一塊兒,生成最後的可執行文件優化
若是有多個源文件,基本上有兩種編譯方法,假設有兩個源文件爲test.c和testfun.c: 1). 多個文件一塊兒編譯 用法:# gcc testfun.c test.c -o test 做用:將testfun.c和test.c分別編譯後連接成test可執行文件。ui
2). 分別編譯各個源文件,以後對編譯後輸出的目標文件連接。 用法: gcc -c testfun.c //將testfun.c編譯成testfun.o gcc -c test.c //將test.c編譯成test.o gcc -o testfun.o test.o -o test //將testfun.o和test.o連接成testspa
gdb命令包含在GNU的gcc開發套件中,是功能強大的程序調試器。GDB中的命令當然不少,但咱們只需掌握其中十個左右的命令,就大體能夠完成平常的基本的程序調試工做。開放源代碼
命令 | 解釋 | 示例 |
---|---|---|
file <文件名> | 加載被調試的可執行程序文件。由於通常都在被調試程序所在目錄下執行GDB,於是文本名不須要帶路徑。 | (gdb) file gdb-sample |
r | Run的簡寫,運行被調試的程序。若是此前沒有下過斷點,則執行完整個程序;若是有斷點,則程序暫停在第一個可用斷點處。 | (gdb) r |
c | Continue的簡寫,繼續執行被調試程序,直至下一個斷點或程序結束。 | (gdb) c |
b <行號> <br> b <函數名稱> <br> b *<函數名稱> <br> b *<代碼地址> <br> d [編號] | b: Breakpoint的簡寫,設置斷點。兩可使用「行號」「函數名稱」「執行地址」等方式指定斷點位置。 <br> 其中在函數名稱前面加「*」符號表示將斷點設置在「由編譯器生成的prolog代碼處」。若是不瞭解彙編,能夠不予理會此用法。<br> d: Delete breakpoint的簡寫,刪除指定編號的某個斷點,或刪除全部斷點。斷點編號從1開始遞增。 | (gdb) b 8 <br> (gdb) b main <br> (gdb) b *main <br> (gdb) b *0x804835c <br> (gdb) d |
s, n | s: 執行一行源程序代碼,若是此行代碼中有函數調用,則進入該函數; <br> n: 執行一行源程序代碼,此行代碼中的函數調用也一併執行。 <br> s 至關於其它調試器中的「Step Into (單步跟蹤進入)」;n 至關於其它調試器中的「Step Over (單步跟蹤)」。 這兩個命令必須在有源代碼調試信息的狀況下才可使用(GCC編譯時使用「-g」參數)。 | (gdb) s <br> (gdb) n |
p <變量名稱> | Print的簡寫,顯示指定變量(臨時變量或全局變量)的值。 | (gdb) p i <br> (gdb) p nGlobalVar |
q | Quit的簡寫,退出GDB調試環境。 | (gdb) q |
選項: -cd:設置工做目錄; -q:安靜模式,不打印介紹信息和版本信息; -d:添加文件查找路徑; -x:從指定文件中執行GDB指令; -s:設置讀取的符號表文件。翻譯
文件: 二進制可執行文件。