首页 > 其他 > 详细

《软件调试艺术》读后感三

时间:2015-06-06 01:41:35      阅读:282      评论:0      收藏:0      [点我收藏+]

1、 GDB调试技

       在谈这个问题前我们有没有遇到过这样的场景,每次要修改一次代码,然后make,之后gdb调试,然后出gdb中quit,再次修改再次make再次gdb进入再次quit一直重复着一个工作。那有没有方法可以避免这样的重复事情呢?毕竟程序员对这种重复的步骤很反感。

       避免的方法如下:在我们对代码修改和编译时另外开一个窗口,这个窗口专门用来修改和编译。GDB调试窗口不要关闭,当在gdb命令行下面输入run(r)命令时,gdb能够重新加载新编译的程序。这时里面设置的断点都还存在,这里的断点不包括临时断点,这你是知道的。只是有所偏差,为什么有偏差,是因为之前设置的断点的行号还是以前的行号,但是现在代码有可能添加了许多,这样就造成一定的偏差。

       在实际项目中,一个项目不可能一天就能完成,有时电脑还是要关机,关机可能是主动,也可能是被动。这样重启之后之前设置的断点都会消失,这时我们可以将我们归纳的调试全部写进.gdbinit文件中,这个文件的位置已经在前面介绍过,不记得的可以翻阅前面的文章。

2、清除断点或监视点

删除断点或监视点可以使用delete命令,命令格式如下:

deletebreakpoint-list

       delete不加参数是删除所有的断点,但是需要确认,以避免你是误操作,如果不需要确认,则需要在.gdbinit启用文件中写入set confirmoff关闭确认功能。

       clear命令:清楚gdb将执行的下一个命令处的断点,这种方法使用与要删除gdb已经到达的断点除的情况。使用方式如下:

clear function、filename:function、line-number和filename:line-number。每个断点都可以被启用或禁止。只有当GDB遇到启用的断点时,才会暂停程序的执行,它会忽略禁止的断点。

3、禁止和启用断点

        disable breakpoint-list命令来禁用断点,使用enable breakpoint-list命令来启用断点,breakpoint-list使用空格分隔符的列表。

       不带任何参数地执行disable命令将禁止所有断点。不带任何参数的enable命令将启用所有断点。enable once命令是启用一次,执行一次后将会处于禁止状态。

所以断点的部署分为三个状态:keep(保持)、del(删除)和dis(禁用)。

4、next和step命令

       next称为单步越过,step是单步进入。next(n)命令执行函数,不会在其中暂停,也就是不会进入函数体的内部。这个命令和step(s)命令都是单步调试,但是s命令会进入函数的内部。如:

a = 5;

b = 10;

result = add(a,b);

printf(“%d\n”, result);

       如果是next进行调试,next不会进入add函数,它会暂停在printf语句处,如果使用step命令,则会暂停在add函数的第一条语句。nextcount相当于单独执行了count次next命令,而continue count的意思是忽略接下来的count个断点。

5、finish命令

      fin 命令:指示GDB恢复执行,知道恰好在当前桟帧完成之后为止,恰当函数返回之后为止。

6、until命令

      until恢复程序执行,until命令(u)通常用来在不进一步在循环中暂停的情况下完成正在执行的循环。用法如下:

until count、until function、until filename:line-number、until filename:function

《软件调试艺术》读后感三

原文:http://blog.csdn.net/qianligaoshan/article/details/46383859

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!