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

  • xidianzxc
  • LV3工程师
  • |      2014-12-18 00:44:49
  • 浏览量 876
  • 回复:4

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

1. 断点(b ——> breakpoint)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5. 修改变量的值

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

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

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

6. 使断点无效

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

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

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

7. 删除断点

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

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

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

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

这个系类的笔记汇总贴在:linux应用程序开发入门笔记系列,欢迎大家交流指正~

 

 

 

 

 

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:4
闭上眼睛就是天黑 2014-12-18
好贴,够味!!
0   回复
举报
发布
xidianzxc 2014-12-18
谢谢~
0   回复
举报
发布
lilei 2014-12-18
确实好贴,精彩!
0   回复
举报
发布
MariannaZhu 2014-12-18

好帖~学习聊~

0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子