天天看點

#導入Word文檔圖檔# Linux下GDB調試工具的運用

一、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 表示是要調試的可執行檔案名稱。​

  • 進入調試界面的效果:
    #導入Word文檔圖檔# Linux下GDB調試工具的運用
  • 直接運作程式
    #導入Word文檔圖檔# Linux下GDB調試工具的運用
  • 退出調試界面(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 + 變量名;

  • 注意事項:
  1. 執行run指令之前,必須設定斷點,否則執行run之後程式就直接運作到結尾了。
  2. 執行單步運作、連續運作、列印指定變量值這些指令時,程式必須是運作狀态(執行run之後)。

繼續閱讀