一、GCC編譯器的常用選項
使用GCC編譯器的時候,我們必須給出一系列必要的調用參數和檔案名稱。GCC編譯器的調用參數大約有100多個,這裡隻介紹其中最基本、最常用的參數。
GCC最基本的用法∶ gcc [參數] [檔案名稱]
-
常用的參數如下-c 隻編譯:不連結成為可執行檔案,編譯器隻是由輸入的.c等源代碼檔案生成.o為字尾的目标檔案,通常用于編譯不包含主程式的子程式檔案。
-o output_filename:确定輸出檔案的名稱為output_filename,同時這個名稱不能和源檔案同名。如果不給出這個選項,gcc就給出預設的可執行檔案a.out。
-g:産生符号調試工具(GNU的gdb)所必要的符号資訊,要想對源代碼進行調試,我們就必須加入這個選項。
-O:對程式進行優化編譯、連結,采用這個選項,整個源代碼會在編譯、連結過程中進行優化處理,這樣産生的可執行檔案的執行效率可以提高,但是,編譯、連結的速度就相應地要慢一些。
-O2:比-O更好的優化編譯、連結,當然整個編譯、連結過程會更慢。
-E:僅執行編譯預處理;
-S:将C代碼轉換為彙編代碼;
示例:
# gcc test.c -o app |
- 編譯時指定庫與頭檔案路徑
-L:指定動态庫路徑。示例:gcc test.c -o app -L/usr/lib
-I:指定頭檔案存放的路徑。示例:gcc test.c -o app -I/usr/include
-l: 指定庫名稱。示例:示例:gcc test.c -o app -lpthread
二、GDB調試工具
我們通常寫C程式,會使用指令gcc test.c -o test,對源檔案進行編譯,但是如果我們要對程式進行調試,就必須在編譯源檔案時,使用-g參數,編譯時使用的指令為:gcc -g test.c -o test
GDB工具也支援自動補全,比如: list指令可以簡寫l ,run指令可以簡寫r
2.1 GDB工具的基本使用
- 編譯支援GDB調試的程式:
[root@wbyq test]# gcc -g test.c -o test |
- 啟用GDB調試:
[root@wbyq test]# gdb a.out |
a.out 表示是要調試的可執行檔案名稱。
- 進入調試界面的效果:
- 直接運作程式
- 退出調試界面(quit指令)
2.2 GDB工具常用的指令
注意沒有輸入新指令,敲回車GDB會再次執行上一條指令
檢視gdb使用幫助
2.2.2 設定程式斷點執行(breakpoints)
使用breakpoints (可簡寫為b)指令給程式添加斷點,共有下面幾種情況:
b <函數名> 在某函數入口處添加斷點; b <行号> 在指定行添加斷點 b <檔案名:行号> 在指定檔案的指定行添加斷點 b <行号 if 條件> 當條件為真時,指定行号處斷點生效,例 b 5 if i=10 ,當i=10時,第5行斷點生效 |
2.2.3 檢視程式已經設定的斷點(info break)
添加完斷點之後,我們可以使用【info break】指令,檢視所有的斷點;
2.2.4 單步\連續支援程式
設定斷點之後執行run指令開始運作程式;
輸入next指令可實作單步運作
輸入continue指令可實作連續運作;
如果想檢視某一變量的值,則使用print/p + 變量名;
- 注意事項:
- 執行run指令之前,必須設定斷點,否則執行run之後程式就直接運作到結尾了。
- 執行單步運作、連續運作、列印指定變量值這些指令時,程式必須是運作狀态(執行run之後)。