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

发布了64 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41488943/article/details/105138212