gdb基本操作指令

1、什么是gdb?

gdb,是The GNU Project Debugger 的缩写,它是一款用于Linux下调试代码的调试器。可以调试C与C++代码,它支持单步执行,逐过程执行,打断点(多个断点也是可以滴!),查看函数堆栈等功能。

2、gdb的使用

我们都知道程序的发布方式分为两种,一种是debug版本,一种就是release版本啦。debug版本就是可以用于调试找bug的版本,release版本是经过大量优化,去除bug后的发布版本。

所以我们如果想要用gdb,就肯定得在debug下调试。

有些小伙伴的linux下可能没有gdb,可以直接输入命令sudo yum -y install  gdb安装哦!

我们前面已经说了我们想要使用gdb,必须要是debug的。但是很遗憾,gcc编译器默认生成的exe文件是release的。

我们验证一下吧。

这里呢,我先用gcc命令将7_30.c编译为可执行程序,然后使用gdb命令进入调试。

但是我们不管使用什么gdb命令都无法调试,这说明了确实gcc编译后的版本是releas的。

那我们处理这个情况的话只要在命令gcc后面加上-g选项,就可以让可执行程序变成debug的啦。

 

这是加上后的结果,我用了gdb中的显示代码命令,确实是可以调试的。

接下来来讲一下基本的命令吧。

进入调试状态的话是gdb+可执行文件名(一定是debug的哦)。

1、退出gdb:quit,开始调试:r 

2、显示代码:l命令(默认显示10行),l+0从头开始显示,往后再输入l的话就可以再显示下面的10行!

3、加入断点(b+行号),显示断点状态(info+b)和取消断点(d+行号)

加入断点:

 显示断点的状态:

其中3 4是断点的编号,最后的 一列表示的是断点所在的行数。中间的Enb列表示断点的是否可以被执行,如果状态是n而不是y的话,我们程序就会跳过这个断点。我们可以通过命令disable+断点编号把这个断点的状态变为n。

 这是输入命令后,我们程序r后直接跳过了16行的断点。

 取消断点:

这里我输入了命令让编号为3的断点取消,再info b查看断点的信息时候,编号3的断点确实没有了。

 有时候我们会有一些特殊的要求,比如说是从一个断点直接跳到下一个断点,那就输入命令c,就可以了,实验的话留给各位读者。

4、单步执行(s)与逐过程执行(n)

我上面写了一个函数,就是为了显示单步执行的情况。 现在我先从函数那一步开始执行,直接打个断点跳到17行

按s单步执行进入函数, 

 命令bt可以查看调用堆栈的情况,我们可以看一下Add函数是否真的被调用了。

可以看出来Add函数已经被调用了, 根据栈的性质,应该是main函数先被调用,所以它压在了栈底。

5、查看变量

现在我们已经在函数当中啦,函数里有一个循环,如果我们想要查看循环变量和结果变量的情况,可以使用display命令+变量名,在每次单步执行的时候都会显示它们。

如果想要取消显示,使用命令undisplay+变量编号 (在上面的图中可以看到,每次显示的左边都有变量对应的编号,比如res就是2,i是1)。

如果我们现在处于循环当中,想要结束掉循环,一种方式是用finish直接结束函数调用,但是我们仅仅只是想要跳出循环的话,可以使用until+行数的方法,跳到对应的行数。

 

这里我们直接跳到了第12行return的地方,res的结果也出来了,所以我们确实跳出了循环。

好啦,最基础的 使用方式就是这些,更多的指令大家可以自己挖掘哦,作者在后续的学习会继续为大家介绍gdb的使用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值