【Linux学习笔记19】Linux调试程序的方法(上)GDB的基本使用方法

在我们日常编程中,难免逃不过bug的出现,那么我们Linux系统也有个很好用的软件用于调试程序:GDB
这一次的笔记不仅是介绍GDB的使用,还会给大家介绍一下我平时使用的一些调试方法。

GDB的简单使用

一、在我们使用GDB之前,我们也要使用GCC编译器来编译,那么为了让我们后续GDB有调试的信息,我们在使用GCC编译程序的时候也要加上一个-g的参数,并且运行一下debug:
在这里插入图片描述
可见这里出现了一个段错误。
(段错误这个很纠结啊真的,因为这个错误是内存泄露等等很多原因都有可能导致段错误,那么我们怎么排查呢?)
二、我们来使用GDB来调试debug:
在这里插入图片描述
三、使用GDB里面的一些命令来调试代码:
1.list( l ):来查看代码:
在这里插入图片描述这里可以看到我第一次使用list,第二次使用l ,第三次直接使用回车键就可以把所有代码都列出来了。

或者当我们代码很多的时候,我们也可以指定它从哪一行开始列出:l 11从第十一行开始:
在这里插入图片描述
但是你可能看到的是从第六行开始列出,这里是GDB软件的一个智能的功能,它知道第11行是一个函数,那么它会把整个函数呈现出来。
也可以指定一个范围列出:l 5,12列出5-12行的代码等等。

2.调试程序,离不开就是打断点:b 就是break point的意思
例如:在第12行打断点:b 12
3.查看断点情况: info b
在这里插入图片描述
4.运行代码: r run :
在这里插入图片描述
如果程序是要携带参数的话,可以直接在后面加上:例如携带123:r 123

5.下一步调试:next / step
next:将函数调用作为一步,跳过函数内部。
step:进入函数内部,一步步调试。
在这里插入图片描述
使用Step后,可能会有朋友说,为什么进入函数不像其他调试软件一样,而是直接进入了第20行。这里也是刚刚提到的GDB的智能功能,因为它默认,一个程序员,基本的int = i这种定义是不会有错误的,所以直接跳入有用的部分。

6.继续运行代码:
在这里插入图片描述
这里进入了一个for循环,刚刚才说完GDB智能,不可能要让人一直按s的,因此,我们可以使用s后面加上参数来实现循环:例如循环10次:s 10
那么我们想跟踪知道i 的值,我们可以使用p i 这是的p 是print的意思,来打印i 的值:在这里插入图片描述
也有朋友说,每次都要手动打印i 很麻烦,那么可以使用display i 来实现一直跟踪i 的值的功能。

7.结合断点,运行代码(设置带条件断点):遇到一些循环,可能我们只需要在最大值看看代码的情况就能完成调试的工作,那么我们可以结合断点,来直接跳到最大值就可以了。例如打一个断点 如果i >=99就停止:

b 20 if i >=99

然后再使用c 或者continue继续运行程序即可。

以上就是常用的一些GDB的基础调试方法,后面的内容将会在下一节继续给大家介绍一些其他的调试程序的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值