1. 程式人生 > >3、利用GDB進行程序調試

3、利用GDB進行程序調試

card shell 編號 設置 語法 處的 lan 進行 接受

本文將用一個實際例子講解如何通過GDB進行程序調試。

首先,我們需要理解的是GDB是GNU開源組織發布的一個強大的UNIX下的程序調試工具,其產生和調試的目的是讓調試者知道,程序在執行時內部發生了什麽,或者運行過程中在做什麽,一般來說,GDB主要幫助實現以下四個方面的功能。

1、啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。
2、可讓被調試的程序在你所指定的調置的斷點處停住。(斷點可以是條件表達式)
3、當程序被停住時,可以檢查此時你的程序中所發生的事。
4、動態的改變你程序的執行環境。

在命令行上輸入gdb即可啟動GDB,一旦啟動完畢,就可以接受用戶從鍵盤輸入的命令並完成相應的任務。若想退出GDB,只需在工作環境中輸入命令quit即可。

下面給出一個調試程序mian.c

#include <stdio.h>

     int func(int n)
      {
             int sum=0,i;
             for(i=0; i<n; i++)
              {
                      sum+=i;
              }
             return sum;
     }
    
    
     main()
     {
             int i;
             long result = 0
; for(i=1; i<=100; i++) { result += i; } printf("result[1-100] = %d /n", result ); printf("result[1-250] = %d /n", func(250) ); }

使用指令

gcc -g main.c -o main

進行編譯後,通過

gdb -tui main

再輸入return,就使用”-tui“選項可以將代碼顯示在一個漂亮的交互式窗口內(所以被稱為“文本用戶界面 TUI”),在這個窗口內可以使用光標來操控,同時在下面的GDB shell中輸入命令。

技術分享圖片

使用gdb調試命令添加斷點,並查看斷點信息如下:

技術分享圖片

運行程序可以看到程序在斷點後停止:

技術分享圖片

繼續運行及相關變量的查看

技術分享圖片

繼續運行及刪除斷點操作

技術分享圖片

查看程序堆棧,運行出當前函數及退出gdb調試

技術分享圖片

通過上面比較直觀的操作,可以對gdb的操作有了一個大體上的理解了。

命令gdb的使用語法如下所示:

gdb 選項  可執行程序 core文件|進程ID

命令gdb的參數一般為待調試運行的程序,也可以為程序運行錯誤時產生的core文件,或者正在運行的進程ID.

GDB常用的選項如下:

-c core 使用指定的core文件檢查程序。

-h 給出幫助選項的簡單說明

-n 忽略./gdbinit文件中指定的命令

-q 不顯示版權等信息。

-s 使用保存在指定文件中的符號表。

GDB的所有命令

GDB的所有命令可以查看http://users.ece.utexas.edu/~adnan/gdb-refcard.pdf,但是我們通常用不到這麽多調試命令,這裏將一些程序調試時常用的命令列出如下:

list 查看程序

1、break 行號 在指定行添加斷點。

2、break 文件名 行號 在指定的文件的指定行添加斷點。

3、break 行號 if 條件 當條件為真時,指定行號處的斷點生效。

例如:

b 5 if i =10  //當i=10時第5行斷點生效

4、set var 變量 =新變量 給某個變量賦值

5、info break 查看所有設置的斷點

6、delete 斷點編號 刪除斷點

7、run 開始運行程序

8、next 單步運行(不進入子函數)

9、step 單步運行(進入子函數)

10、 continue 繼續運行程序

11、print(p) p為變量名,查看指定變量名的值

12、finish 運行程序,直到當前函數結束

13、watch 變量名 對指定變量名進行監控

14、quit 退出GDB

15、bt 顯示所有的調試棧幀,該命令可以用來顯示函數的調用順序

16、clear 刪除設置在特定文件、特定行上的斷點

17、display EXPR 每次程序停止後顯示表達式的值

18、file FILE 裝在制定的可執行文件中進行調試

19、help name 顯示指定命令的幫助信息

20、info func 顯示所有函數的名稱

21、info local 顯示函數中的局部變量信息

22、info prog 顯示被調試程序的執行狀態

23、info var顯示所有的全局和靜態變量名稱

24、kill 終止正在調試的程序

25、make 在不退出GDB的情況下,運行make工具。

26、print EXPR 顯示表達式EXPR的值。

參考鏈接

https://baike.baidu.com/item/gdb/10869514?fr=aladdinGDB的百度百科

https://linux.cn/article-4302-1.html使用GDB進行調試的一個實例

http://blog.csdn.net/yyaong_520/article/details/6766831GDB調試命令詳解

3、利用GDB進行程序調試