调试对于软件的成败至关重要,正确使用恰当的调试工具可以提高发现和改正错误的效率。《软件调试的艺术》详细介绍了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
Thisisthefourtheditionofthemarket-leadingreferenceforhumanfactorsandergonomicsre...
手感設計之所以會成為日本設計的特色,就在於日本人將設計不只是視之為功能的詮釋品而已。設計代表了文化、便利生活的器具、成為
《商业银行资产负债管理实践》内容简介:本书是在学习借鉴国际先进商业银行资产负债管理理论和实践的基础上,对中国商业银行多年资
《新技术 新业态:进化中的监管科技及其应用》内容简介:本书介绍了监管科技的起源和技术框架,对国外金融发达经济体监管科技的发展
本书以IEEE802系列标准为主介绍局域网与城域网的相关技术,涉及lOMbps以太网、快速以太网、千兆位以太网、万兆位以太网、交换式以
《西方哲学史·第五卷:启蒙时代的法国哲学(学术版)》内容简介:本书是叶秀山、王树人总主编的《西方哲学史》(学术版)之分卷。
JAVA程序员修炼之道 本书特色 《java程序员修炼之道》分为四部分,**部分全面介绍java7的新特性,第二部分探讨java关键编程知识和技术,第三部分讨论...
《为书作嫁》内容简介:本书是“日知文丛”之一。是南京大学古典文献研究所所长程章灿教授历年所写的50篇书评、序跋、随笔集。全书
机器学习理论及应用 本书特色 《机器学习理论及应用》:当代科学技术基础理论与前沿问题研究丛书:中国科学技术大学校友文库。机器学习理论及应用 内容简介 机器学习新...
《山水田园城市实践》内容简介:本书从贵安新区山水田园城市实践切入,围绕新区农村综合改革社村标准化建设体系这根线,大量翻阅了
《玩的就是调侃:打造你的金牌博客》按博客的主要内容,将纷繁复杂的博客群体划分为五大类,一一介绍,每章通过对该类博客总体情况
本书按字母顺序编排,查阅方便,能迅速根据名称检索设计原则。对于有兴趣解决具体问题的读者,本书根据设计师常见的问题给通则作
内容简介本书面向智能控制学科前沿,从工程应用的角度出发,比较全面地介绍了智能控制的基本概念、理论和系统设计方法及微机实现
《国际经济学教程(第二版)》内容简介:本书主要内容有国际贸易的理论与政策、国际收支理论、汇率理论、要素的国际流动理论、国际
《人工智能不会做什么》内容简介:人工智能的开发面临哪些课题?它们与人类有哪些本质上的差异? 随着人工智能围棋程序AlphaGo打败
C语言程序设计 内容简介 C语言是国内外广泛使用的计算机语言,是计算机从业人员应该掌握的一种重要的程序设计工具。本书是针对应用型人才的培养要求,经过精心策划,准...
Essential C++:英文版 本书特色 本书是众多C++初学者的入门经典。全书从4个方面来表现C++的本质:procedural(过程化的)、generi...
Whateveryourprogramminglanguage,whateveryourplatform,youprobablytapintolinkerand...
《我爱问连岳之少年问答》内容简介:说到“少年”,我们常常会哼起那首熟悉的旋律:“小小少年,很少烦恼,眼望四周阳光照”。曾经
市面上有很多介绍C语言的书,但这是第一本将C语言以简洁而实用的方式介绍给读者的书籍。用C语言进行编程不仅仅是在程序中使用正确