各位看官们,大家好,我们在上一回中说简单地介绍了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的内容,今天咱们就说到这里。欲知后事如何,且听下回分解!
版权声明:本文为博主原创文章,未经博主允许不得转载。