首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

linux应用程序开发入门——初试调试工具gdb(2)

linux应用程序开发入门——初试调试工具gdb(2)

上个关于GDB的帖子,感觉写了跟没写似得,这次我们继续,我们在调试程序的时候,经常使用的功能有:

1.
断点(b ——> breakpoint)

这个命令的功能是加入断点,下面我们具体来说:






红线处,我们使用”b 函数名的方式在main函数处加入断点,表示程序开始后即停住,当然加入断点的方式不是只有这一种,看下面:



我们使用”b 数字的方式在特定的某一行加入断点~,比如说我们可能加入了很多断点,我们忘了,那么我们可以来查看一下:


我们使用”info b“来查看我们设置的断点的情况,我们来说说这个列表信息:

1.
第一列表示断点的标号

2.
第四列告诉我们断点的使能情况‘y’表示yes,有效;’n‘表示no,无效

3 最后一列告诉我们断点在哪个文件的第几行

加入断点之后,我们来调试:



输入’r’之后,程序开始运行,但是因为我们设置了断点,所以如上图所示,程序停在了断点处,可以看见,程序停在了初始化num这一句上。我们知道这个时候num还没有被初始化,所以num的值应该是随机的,不信,我们来查看一下:


2. 查看变量的值(p ——> print)



这里我们使用”p 变量名的方式来查看变量的取值,果然是个随机的值

3.单步运行(s ——>  step

接着,我们来单步运行一下:



我们使用’s‘命令来单步调试,如上图所示程序从刚才的第6行,运行到了第7行,现在呢,num肯定已经被初始化为0了,不信,我们来查看一下:



下面我们到了第7行,这一行有些特殊,因为它是调用了一个函数,如果我们使用’s’进行单步的话,我们将会进入函数体内部,那么如果我们不愿这样呢?


4. 单步,但是不进入函数体内部(n ——> next



这里,我们使用’n‘,来实现我们的功能,可以看见程序直接运行完了整个函数,进入了下一行。

5. 修改变量的值

在调试程序的时候,我们很多时候需要临时修改程序中变量的值,下面我们来演示:



我们修改使用“set variable 变量名=xx”的方式来修改变量的值,从上图可以看见,我们成功的修改了num的值。

6. 使断点无效

有些时候,有些断点我们在加入了之后,我们可能需要让它暂时无效:



我们先查看一下断点的情况,确认2号断点是y,也就是有效的,然后我们使用“disable 2”来使它无效,同样的我们可以使用”enable 2“来让2号断点有效,这里就不演示了。

7. 删除断点



我们使用”delete 断点号的方式来删除断点

8. 进入到一个函数之后,快速的出来(c ——> continue

有些时候,我们因为要查看变量在函数里执行情况,我们需要进入子函数,当我们看完关键代码后,我们可能会希望快速的出来,而不是继续单步出来。这个时候我们可以直接输入“c”我们就能运行到函数结尾,或者下一个断点处了。
返回列表