调试对于软件的成败至关重要,正确使用恰当的调试工具可以提高发现和改正错误的效率。《软件调试的艺术》详细介绍了3种调试器,GDB用于逐行跟踪程序、设置断点、检查变量以及查看特定时间程序的执行情况,DDD是流行的GDB的GUI前端,而Eclipse提供完整的集成开发环境。书中不但配合实例讨论了如何管理内存、理解转储内存、跟踪程序找出错误等内容,更涵盖了其他同类书忽略的主题,例如线程、客户/服务器、GUI和并行程序,以及如何躲开常见的调试陷阱。
《软件调试的艺术》适合各层次软件开发人员、管理人员和测试人员阅读。
第1章 预备知识 1
1.1 本书使用的调试工具 1
1.2 编程语言 2
1.3 调试的原则 2
1.3.1 调试的本质:确认原则 2
1.3.2 调试工具对于确认原则的价值所在 2
1.3.3 其他调试原则 3
1.4 对比基于文本的调试工具与基于GUI的调试工具,两者之间的折中方案 4
1.4.1 简要比较界面 4
1.4.2 折中方法 9
1.5 主要调试器操作 11
1.5.1 单步调试源代码 11
1.5.2 检查变量 12
1.5.3 在GDB、DDD和Eclipse中设置监视点以应对变量值的改变 14
1.5.4 上下移动调用栈 14
1.6 联机帮助 15
1.7 初涉调试会话 16
1.7.1 GDB方法 18
1.7.2 同样的会话在DDD中的情况 31
1.7.3 Eclipse中的会话 34
1.8 启动文件的使用 38
第2章 停下来环顾程序 39
2.1 暂停机制 39
2.2 断点概述 39
2.3 跟踪断点 40
2.3.1 GDB中的断点列表 40
2.3.2 DDD中的断点列表 41
2.3.3 Eclipse中的断点列表 42
2.4 设置断点 42
2.4.1 在GDB中设置断点 42
2.4.2 在DDD中设置断点 45
2.4.3 在Eclipse中设置断点 46
2.5 展开GDB示例 46
2.6 断点的持久性 48
2.7 删除和禁用断点 50
2.7.1 在GDB中删除断点 50
2.7.2 在GDB中禁用断点 51
2.7.3 在DDD中删除和禁用断点 51
2.7.4 在Eclipse中删除和禁用断点 53
2.7.5 在DDD中“移动”断点 53
2.7.6 DDD中的Undo/Redo断点动作 54
2.8 进一步介绍浏览断点属性 55
2.8.1 GDB 55
2.8.2 DDD 56
2.8.3 Eclipse 56
2.9 恢复执行 56
2.9.1 在GDB中 57
2.9.2 在DDD中 64
2.9.3 在Eclipse中 66
2.10 条件断点 66
2.10.1 GDB 67
2.10.2 DDD 69
2.10.3 Eclipse 69
2.11 断点命令列表 70
2.12 监视点 74
2.12.1 设置监视点 75
2.12.2 表达式 77
第3章 检查和设置变量 78
3.1 主要示例代码 78
3.2 变量的高级检查和设置 80
3.2.1 在GDB中检查 80
3.2.2 在DDD中检查 84
3.2.3 在Eclipse中检查 86
3.2.4 检查动态数组 88
3.2.5 C++代码的情况 90
3.2.6 监视局部变量 92
3.2.7 直接检查内存 92
3.2.8 print和display的高级选项 93
3.3 从GDB/DDD/Eclipse中设置变量 93
3.4 GDB自己的变量 94
3.4.1 使用值历史 94
3.4.2 方便变量 94
第4章 程序崩溃处理 96
4.1 背景资料:内存管理 96
4.1.1 为什么程序会崩溃 96
4.1.2 内存中的程序布局 97
4.1.3 页的概念 99
4.1.4 页的角色细节 99
4.1.5 轻微的内存访问程序错误可能不会导致段错误 101
4.1.6 段错误与Unix信号 102
4.1.7 其他类型的异常 105
4.2 核心文件 106
4.2.1 核心文件的创建方式 106
4.2.2 某些shell可能禁止创建核心文件 107
4.3 扩展示例 108
4.3.1 第一个程序错误 111
4.3.2 在调试会话期间不要退出GDB 113
4.3.3 第二个和第三个程序错误 113
4.3.4 第四个程序错误 115
4.3.5 第五个和第六个程序错误 116
第5章 多活动上下文中的调试 120
5.1 调试客户/服务器网络程序 120
5.2 调试多线程代码 125
5.2.1 进程与线程回顾 125
5.2.2 基本示例 127
5.2.3 变体 132
5.2.4 GDB线程命令汇总 133
5.2.5 DDD中的线程命令 134
5.2.6 Eclipse中的线程命令 134
5.3 调试并行应用程序 136
5.3.1 消息传递系统 136
5.3.2 共享内存系统 141
5.4 扩展示例 143
5.4.1 OpenMP概述 143
5.4.2 OpenMP示例程序 144
第6章 特殊主题 155
6.1 根本无法编译或加载 155
6.1.1 语法错误消息中的“幽灵”行号 155
6.1.2 缺少库 160
6.2 调试GUI程序 162
第7章 其他工具 172
7.1 充分利用文本编辑器 172
7.1.1 语法突出显示 172
7.1.2 匹配括号 174
7.1.3 Vim与makefile 175
7.1.4 makefile和编译器警告 176
7.1.5 关于将文本编辑器作为IDE的最后一个考虑事项 177
7.2 充分利用编译器 178
7.3 C语言中的错误报告 178
7.4 更好地使用strace和ltrace 182
7.5 静态代码检查器:lint与其衍生 184
7.5.1 如何使用splint 185
7.5.2 本节最后注意事项 185
7.6 调试动态分配的内存 185
7.6.1 检测DAM问题的策略 188
7.6.2 Electric Fence 188
7.6.3 用GNU C库工具调试DAM问题 190
第8章 对其他语言使用GDB/DDD/Eclipse 196
8.1 Java 196
8.1.1 直接使用GDB调试Java 198
8.1.2 使用DDD与GDB调试Java 201
8.1.3 使用DDD作为JDB的GUI 201
8.1.4 用Eclipse调试Java 201
8.2 Perl 202
8.2.1 通过DDD调试Perl 204
8.2.2 在Eclipse中调试Perl 206
8.3 Python 207
8.3.1 在DDD中调试Python 208
8.3.2 在Eclipse中调试Python 209
8.4 调试SWIG代码 210
8.5 汇编语言 213
《大数据区块链金融:贵阳的实践与思考》内容简介:《大数据区块链金融》一书从理论支撑、政策支持、学术研究、区块链联盟组织、区
《文化治理与文化创新》内容简介:本书系统研究文化治理与文化创新,确定文化的定位与定向,阐述文化自觉与文化自信,分析文化系统
操作系统概念(第六版)OPERATING SYSTEM CONCEPTS 本书特色 本套教学用书的特点:权威性——教育部高等教育司推荐、教育部高等学校信息科学与...
全面讲述React技术栈的第一本原创图书,purerender专栏主创倾力打造覆盖React、Flux、Redux及可视化,帮助开发者在实践中深入理解
《WSNRFID物联网原理与应用》紧紧围绕物联网两大核心技术——射频识别(RFID)和无线传感网(WSN),对技术的基本原理以及典型应
《SilverlightASP.NET与AJAX开发实战》讨论Silverlight的部分,并没有预设读者必须具备任何背景或知识,但若能有XML的基础概念,
《巡天记》内容简介:1965年9月,在一条神秘的军用铁路线的列车上,来自同一班级的10大学毕业生,一起奔向大漠深处的神秘之地。几年
郑纬民男,1946年生,浙江宁波人。1970年毕业于清华大学自动控制系并留校任教。1982年在清华大学计算机系获硕士学位。现为清华大
数据库重构 本书特色 本书首次专门讨论数据库重构,向数据专业人员展示了如何运用重构、测试驱动及其他敏捷技术进行演进式数据库开发。书中通过许多实际例子,详细说明了...
《移动App测试的22条军规》内容简介:本书全面讲解了移动App测试的技术、技巧、工具、案例和测试用例,全书共分23章,主要内容为:
C程序设计语言(第2版.新版) 内容简介 本书是由C语言的设计者Brian W.Kernighan和Dennis M.Ritchie编写的一部介绍标准C语言及其...
天亮了一只鸟落在船上蝴蝶从水面飞过湖畔边的蜘蛛网里,一只蜘蛛正在和天牛扭打野鸭悠然自得地从水面游走傍晚了月亮倒映在湖面上
《趣学Python算法100例》内容简介:本书从一些经典算法出发,为读者展示了100个Python趣味编程实例。本书共12章,涵盖趣味算法入门
C.NET程序设计 本书特色 《C#.NET程序设计》:教材特色这是一本为高职高专学生量身定做的计算机类专业的项目课程教材。 任务引领本教材以任务为载体,将知识...
《深入理解JavaScript特性》内容简介:本书旨在让读者轻松学习JavaScript的新进展,包括ES6及后续更新。书中提供了大量实用示例,以
IfyourefamiliarwithHTML,youcanquicklylearnhowtobuildinteractive,data-drivenwebsi...
一个会点石成金的神仙分别问三个人想要什么。第一个人说,我要很多很多的金子,然后神仙用手指往他面前的石头一点,石头就变成了
《出世还是入世》内容简介:本书作者何善蒙老师用通俗易懂的语言,讲解以孔孟老庄等十四位中国古代哲人的思想,展现中国先哲的人生
本书系统地介绍了数据通信和计算机网络领域的基本内容。在第一版的基础上,修改和增加了新的内容,包括无线和卫星通信、有线电视
《创新思维与科技创新》内容简介:科技创新包括知识创新、技术创新和管理创新,是当代大学生必须学习和掌握的创新、创业的基础且重