Linux调试器--gdb使用

1.背景

  • 程序的发布方式有两种,debug模式和release模式。
  • debug模式下增添了一些调试信息,一般debug比release模式的程序要大。
  • Linux gcc/g++出来的二进制程序,默认是release模式。
  • 要使用gdb调试,必须在源代码生成的二进制程序的时候,加上-g选项。

2.gdb的使用

2.1 安装gdb命令

sudo yum install -y gdb(如果安装过了,就不必再安装)

2.2 学习gdb的常见指令

2.2.1 测试代码

学习之前我们先写一段用于测试的代码,你也可以边看边敲

  1 #include <stdio.h>
  2 #include <time.h>
  3 
  4 int AddToVal(int from,int to)
  5 {
  6     int i = 0;
  7     int result = 0;
  8     for(i = from;i <= to;++i)
  9     {
 10         result += i;
 11     }
 12 
 13     return result;
 14 }
 15 
 16 void print(int sum)
 17 {
 18     long long time_t = time(NULL);
 19     printf("sum = %d time = %lld\n",sum,time_t);                                                
 20 }
 21 
 22 int main()
 23 {
 24     int sum = AddToVal(0,100);
 25 
 26     print(sum);
 27     return 0;
 28 }

2.2.2 编译代码:

gcc -g mytest.c(或者gcc -g mytest.c -o mytest用来指定生成的可执行程序)。切记:务必带上-g选项,表明生成的是debug模式,如果不带,生成的是release模式。release模式中没有调试信息。

在这里插入图片描述

2.2.3 调试代码:

  • 调试代码本质就是调试可执行程序

指令: gdb + 可执行程序(进入调试状态)

在这里插入图片描述

调试代码是在命令行上调试的,所以我们要看到代码才能更好的完成调试工作,那么如何查看代码呢?

指令: l + 行号
在这里插入图片描述
注意:如果要继续往下面看,直接enter就好

指令: r(run调试运行)
在这里插入图片描述
注意:如果执行r指令,但程序中间也没有断点,那么程序就直接跑完了。如果有断点,就执行到断点处。

指令: c(跳到下一个断点处)

在这里插入图片描述

在VS下面我们经常设置断点,来加快调试效率,那么,在gdb关于断点都有哪些知识呢?
指令: b + 行号(设置断点)
在这里插入图片描述
指令: info b(查看断点)
在这里插入图片描述
指令: d + 编号(去掉断点)
在这里插入图片描述
指令: n (逐过程执行)
在这里插入图片描述
指令: s (逐语句执行)
在这里插入图片描述
指令: p (查看变量)
在这里插入图片描述
但是用p查看变量具有临时性,一但执行其他指令,查看的临时变量就消失了。所以我们一般用display来查看变量,来达到常显示。

指令: display + 变量
在这里插入图片描述
指令:undisplay + 变量(取消常显示)
在这里插入图片描述
指令: until + 行号(跳转到指定行)
在这里插入图片描述
注意:这个跳转具有一些特殊性质,它会首先跳出当前函数,所以跳转到了24行

指令: bt (查看调用堆栈)
在这里插入图片描述

3.gdb常见指令总结

在这里插入图片描述

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sense the warmth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值