《软件调试的艺术》学习笔记——GDB使用技巧摘要(1)

2023-11-19

《软件调试的艺术》,因为名是The Art of Debugging with GDB, DDD, and Eclipse. 作者是美国的Norman Matloff和Peter Jay Salzman,中文版由张云翻译。是人邮出版社图灵程序设计丛书初版。

这里称为"艺术",个人觉得有点过了,但是其中关于gdb以及在gdb基础之上集成的DDD和Eclipse调试技巧的整理确实是做的很好,对于Linux/开源社区下的开发人员以及其他平台技术gdb调试的开发人员都是很有帮助。毕竟有句话叫做:程序是调出来的,不是写出来的。这句话的意思没有抹杀程序设计思想、框架、优良编码风格的意味,只是谁都知道,软件怎么可能没有bug呢?
下面是整理的内容:
(DDD和Eclipse在调试时确实有其独特之处,但是我都没有怎么用过,所以就没有阅读其中的内容,自然也没有整理)
  1. 调试的原则
    1. 调试的本质:确认原则
    2. 其他原则
      1. 从简单工作开始调试
      2. 使用自顶向下的方法
      3. 使用调试工具确定段错误的位置
      4. 通过发出中断确定无限循环的位置
      5. 使用二分搜索
调试的原则是和具体调试工具无关的,是程序员对代码世界的分析、认识的一种方法学和思路,是对程序运行时状态变化作出的一种习惯、相对正确的反应。
修改充满错误的程序(很多年轻的程序员开始都认为自己的程序是没有错误的,其实很多细节、编码规范都可能存在问题),就是逐个去确认你认为正确的代码确实是正确的。当你发现其中某个假设不成立时,就表示已经找到了关于程序错误所在位置的线索(甚至是错误本身)。这就是确认原则。

这里无意讨论基于文本的调试工具和基于GUI的调试工具的差别,应该说两者各有千秋,用在合适的地方就是好,在合适的人手里就是合适的武器。
值得介绍的是GDB有个-tui选项,和Ctrl+X+A组合键可以在文本模式和TUI模式之间切换。CGDB ( http://cgdb.sf.net) 是对其的一种增强和改善。

开始介绍GDB的知识点。

要用gdb调试能够有代码显示,必须用-g选项进行编译源码。另外使用gdb的时候,尽量多用tab键。

  • 断点

下断点是break(缩写是b),后面可以接行号(或者文件名:行号)、函数名、内存指令地址;

tbreak是临时断点,有限次数为一次;

对应的高级技巧有条件断点。比如

(gdb) break 30 if num_y == 1

这表示在第三十行下条件断点,条件为num_y==1是中端程序运行

删除断点用delete,禁用/启用断点为disable/enable

到断点了可以step/next/continue等命令执行,还有clear、condition等命令可以使用,多看help

  • 观察点

还可以用观察点来查看变量、内存、表达式的值是否改变,同样可以加条件。多试试就记住了。命令是watch

  • 查看变量

查看变量是print 后面接变量名,也可以是表达式,函数等,灰常强大

调试的时候一般开两个终端,一个是gdb调试终端,一个编辑、编译终端,这样gdb发现问题的时候就不用退出,直接在另外一个终端修改好编译后直接在gdb里面重新ruan程序就行。这样的好处是之前设置的断点、宏等都还存在。

未完待续

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《软件调试的艺术》学习笔记——GDB使用技巧摘要(1) 的相关文章

随机推荐