一起talk GDB吧(第二回:GDB单步调试)


各位看官们,大家好,我们在上一回中说简单地介绍了GDB。这一回中,我们介绍GDB的调试功能:单步

调试。闲话休提,言归正转。让我们一起talk GDB吧!


看官们,我们先说一下什么是单步调试。大家都知道,程序是按照指令,一步一步地执行,只是程序运行

的很快,所以你没有办法看到走过的每一步。这个有点类似我们平常走路,一步一步地向前走,在路上可

以看到许多风景,如果坐车,那么车速太快了,就会看不清楚路上的风景。单步调试就是不让程序很快地

执行,通俗点说,说是不让程序“坐车”走,让程序一步一步地运行。


我们来看看如何使用GDB让程序一步一步地运行。详细的步骤如下:

  • 1.启动GDB:gdb file.o(表示使用GDB对file.o这个程序进行调试);
  • 2.开始调试:start.这个时候,GDB会从file.o程序中的main函数开始执行;
  • 3.单步调试:next(可以缩写为n)。程序运行到下一条语句;
  • 4.反复调试:继续输入n,程序就会跳到下一行。如此反复,程序就会一步步地运行。

这里有个技巧和大家共享一下:执行完第一个n命令后,如果想继续执行n命令,那么只需要按下回车键就

可以继续执行n命令,而不需要继续输入n,因为在GDB中回车键表示重复执行它前面的命令,这个有点类似

Linux中的点命令。


在单步调试过程中遇到程序中的函数时,会把函数调用当做一个整体,大家可能不理解,没关系,咱们举个

例子:程序中有以下三条语句:

a =5;b = 3;

c =min(a,b); //min是求最小值的一个函数

printf("min is :%d",c);

当程序运行到“a =5;b = 3;”这行时,使用单步调试命令n,程序会运行到“c =min(a,b);”这一行,如果再执行

单步调试n,那么程序会运行到“printf("min is :%d",c);“这一行。大家都知道,函数是多个语句组成的,不

会一步就运行完,但是单步调试的时候把函数看成了一个整体,让它一步运行完。如果我们想看函数中每

个语句的运行步骤,怎么办?看官莫急,强大的GDB不会让我们失望的,我们可以使用GDB的命令:step

(缩写为s),使用该命令可以进入函数中。然后就能使用单步调试命令,一步一步地看清楚函数中每条语句

的运行步骤了。如果想从函数中跳出来可以使用命令:finish.这时程序会调用函数的地方,也就是我们例子

中“printf("min is :%d",c);“这一行。


看官们,通过单步调试,我们可以看到程序运行的“脚印”。在调试过程中,如果看到程序运行步骤与我们

事先给程序设计好的步骤不一样,那么说明程序没有按照我们设计的步骤走。这肯定是有地方出问题了,

我们需要把出问题的地方找出来。因为程序是一步一步地运行,所以我们很容易找到哪一步出了问题,进

而找出问题的原因。这便是单步调试的作用。当然了,单步调试还有其它的作用,它可以和其它调试方法

一起配合使用,至于是什么调试方法,我们以后在的章回中会介绍。


我们平时还觉得电脑上的程序不够快呢,你还不让它“坐车”,让它步行,这不让电脑更加慢了吗?看官说的

有道理。不过,我们通过单步调试让程序执行慢下来,目的是为了看清楚程序每一步执行时的样子,这样

有助于我们发现程序中错误,进而方便我们修改程序中错误。试想一下,程序“坐着车”跑的那么快,你还没

有看清楚它的样子,它已经跑的无影无踪,更不要说找它的执行时的错误了。


看官们,关于GDB的内容,今天咱们就说到这里。欲知后事如何,且听下回分解!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

talk_8

真诚赞赏,手有余香

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

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

打赏作者

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

抵扣说明:

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

余额充值