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

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

这里称为"艺术",个人觉得有点过了,但是其中关于gdb以及在gdb基础之上集成的DDDEclipse调试技巧的整理确实是做的很好,对于Linux/开源社区下的开发人员以及其他平台技术gdb调试的开发人员都是很有帮助。毕竟有句话叫做:程序是调出来的,不是写出来的。这句话的意思没有抹杀程序设计思想、框架、优良编码风格的意味,只是谁都知道,软件怎么可能没有bug呢?

下面是整理的内容:

DDDEclipse在调试时确实有其独特之处,但是我都没有怎么用过,所以就没有阅读其中的内容,自然也没有整理)

1        调试的原则

1        调试的本质:确认原则

1        其他原则

1        从简单工作开始调试

1        使用自顶向下的方法

1        使用调试工具确定段错误的位置

1        通过发出中断确定无限循环的位置

1        使用二分搜索

调试的原则是和具体调试工具无关的,是程序员对代码世界的分析、认识的一种方法学和思路,是对程序运行时状态变化作出的一种习惯、相对正确的反应。

 

修改充满错误的程序(很多年轻的程序员开始都认为自己的程序是没有错误的,其实很多细节、编码规范都可能存在问题),就是逐个去确认你认为正确的代码确实是正确的。当你发现其中某个假设不成立时,就表示已经找到了关于程序错误所在位置的线索(甚至是错误本身)。这就是确认原则。


这里无意讨论基于文本的调试工具和基于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等命令执行,还有clearcondition等命令可以使用,多看help

·        观察点

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

·        查看变量

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

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

 

 

command命令可以在每次发生断点的时候自动执行一系列命令,解放程序员的双手。

见示例:

(gdb) command 1

Type commands for when breakpoint 1 is hit, one per line.

End with a line saying just "end"

>silent

>printf "fibonacci was passed %d./n", n

> continue

>end

(gdb) run

Starting program: fibonacci

fibonacci was passed 3.

fibonacci was passed 2.

fibonacci was passed 1.

fibonacci was passed 0.

fibonacci was passed 1.

Fibonacci(3) is 3.

 

Program exited normally.

(gdb)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值