Linux學習筆記04 -- gdb調試器的基本使用

1.簡介

GDB是GNU開源組織發佈的一個強大的UNIX下的程序調試工具,可完成以下功能

  • 運行被調試程序,設置所有能影響該程序的參數和變量
  • 保證被調試程序在指定的條件下停止運行
  • 當被調試程序停止時,讓開發工程師檢查發生了什麼
  • 根據每次調試器的提示信息來做相應的改變,以便修正某個錯誤引起的問題

2.gdb使用

1)開始調試

首先使用gcc對源文件進行編譯,一定要加上-g顯示調試信息,如下

gcc -g test.c  	# 第一步
gdb a.out	    # 第二步 

或者使用-o對特定的名字的可執行程序進行調試

gcc -g test.c -o test	# 第一步
gdb test		   # 第二步

2)gdb調試參數

進入gdb模式下,使用以下命令

命令 功能
(gdb)l 參看源文件(默認爲前10行),加標號,回到第一次顯示10行的位置,如l 1。 同理可跳轉值l 2
(gdb)b N 在N行設置斷點
(gdb)info b 查看設置斷點情況
(gdb)del n 刪除斷點,如刪除第一個斷點爲del 1,同樣刪除第二個斷點爲del 2
(gdb)r 運行代碼
(gdb)p n 查看變量值
(gdb)n 單步運行,遇到函數不進入
(gdb)s 單步運行,遇到函數進入函數
(gdb)c 恢復程序運行嗎,直接運行到程序的下一個斷點
(gdb)help command 幫助
(gdb)q 退出gdb調試

3)調試流程

在Linux中使用gdb調試下面的計算兩個數之間的乘積和的一個程序

int main()
{
  int count =1;
  int sum = 1;
  int n;
  int limit_number;
  printf("this program is to multiply between numbers!\n");
  printf("Enter the limited numbers: ");
  scanf("%d",&n);
  if(n > 0)
  {
    while(count++ < n)
    {
      sum *= count;
    }
    printf("sum = %d\n",sum);
  }
  else if( n < 0 )
  {
    printf("wrong way input ,you should input > 0 numbers! try again!\n");
    printf("Enter the limited numbers: ");
    scanf("%d",&limit_number);  //需要指定一個和以前不一樣的限定值,以防止按參數傳遞
    while(count++ < limit_number)
    {
      sum *= count;
    }
    printf("sum = %d\n",sum);


  }
  else
    printf("the sum all equal to 0!,Bye\n");

  return 0;
}

a.進入gdb調試

在這裏插入圖片描述

b.使用l命令查看

在這裏插入圖片描述

c.設置斷點並查看斷點

這裏在12行和19行設置了兩個斷點
在這裏插入圖片描述

d.運行

單步運行至13行斷點處
在這裏插入圖片描述

e.查看變量值

查看設置的sum變量和count變量
在這裏插入圖片描述

f.繼續運行到下一個斷點

跳過此斷點,使用c命令繼續運行到下一個斷點
在這裏插入圖片描述

3.gdb使用要點

  • gcc編譯選項中一定要加入 -g
  • 只有在代碼處於“運行”或者“暫停”狀態時才能查看變量值
  • 設置斷點後程序在指定行之前停止

4. 參考

gdb的其他詳細用法可參考一下兩篇博文
參考博文1

參考博文2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章