软件调试的艺术(Linux Unix平台软件调试权威著作)
基本信息
- 作者: (美)Norman Matloff Peter Jay Salzman [作译者介绍]
- 译者: 张云
- 丛书名: 图灵程序设计丛书 软件工程系列
- 出版社:人民邮电出版社
- ISBN:9787115213969
- 上架时间:2009-11-13
- 出版日期:2009 年11月
- 开本:16开
- 页码:216
- 版次:1-1
- 所属分类:
计算机 > 软件工程及软件方法学 > 软件质量、软件测试及维护
编辑推荐
Amazon五星图书,优秀的软件调试入门著作
总结业界多年口口相传的调试经验
丰富的C/C++实例阐述适用于各种平台与编程语言的通用调试原则
详解GDB、DDD和Eclipse三大工具应用
推荐阅读
内容简介回到顶部↑
调试对于软件的成败至关重要,正确使用恰当的调试工具可以提高发现和改正错误的效率。本书详细介绍了 3种调试器,gdb用于逐行跟踪程序、设置断点、检查变量以及查看特定时间程序的执行情况, ddd是流行的 gdb的 gui前端,而 eclipse提供完整的集成开发环境。书中不但配合实例讨论了如何管理内存、理解转储内存、跟踪程序找出错误等内容,更涵盖了其他同类书忽略的主题,例如线程、客户 /服务器、gui和并行程序,以及如何躲开常见的调试陷阱。.
本书适合各层次软件开发人员、管理人员和测试人员阅读。...
本书适合各层次软件开发人员、管理人员和测试人员阅读。...
作译者回到顶部↑
本书提供作译者介绍
Norman Matloff 美国加州大学戴维斯分校计算机科学教授,研究领域涉及并行处理(尤其是软件分布式共享内存)、计算机通信网络、数据安全及数学和应用统计等。他编写了很多开源软件包,创作的在线教程也深受欢迎。.
Peter Jay Salzman 美国加州大学戴维斯分校理论物理博士,该校Linux用户组的创建者,同时维护着多个受欢迎的在线HOWTO。现在华尔街某金融企业做程序员。...
.. << 查看详细
Peter Jay Salzman 美国加州大学戴维斯分校理论物理博士,该校Linux用户组的创建者,同时维护着多个受欢迎的在线HOWTO。现在华尔街某金融企业做程序员。...
.. << 查看详细
目录回到顶部↑
第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.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
前言回到顶部↑
“嘿,还真不错呢!”我们的学生Andrew首次认真使用调试工具后惊叹道。Andrew三年前在大一上编程课时就学过了调试工具,不过那时他只是将调试工具当做应付期末考试的内容来打发的。现在他已经大四了,教授强烈要求他停止采用输出语句进行调试的方法,改为使用正式调试工具。让Andrew喜出望外的是,他发现使用恰当的工具可以大大缩短调试时间。.
如今,在学生及已参加工作的程序员中,还有不少“Andrew”,但愿本书能帮助“Andrew们”发现调试工具的好处。但是,我们更希望本书能帮助那些已经使用了调试工具,但还无法确定在什么情况下该做什么事的程序员做出适当的判断。本书也适用于打算进一步学习调试工具及其幕后原理的人。
本书的编辑曾说过,很多调试知识以前都只是在圈子里口口相传,没有正式编著成书。本书将改变这一状况。本书回答了下列问题。
如何调试线程代码?
为什么有时候断点最终出现的位置与原来设置的位置略有偏差?
GDB的until命令为什么有时会跳到意想不到的地方?
如何巧妙使用DDD和Eclipse?
在当今普遍使用GUI的时代,像GDB这样的基于文本的应用程序还有价值吗?
为什么当错误代码超出数组边界时不发生段错误?
为什么要将我们的一个示例数据结构命名为nsp?(不好意思,这只是与我们的出版商No Starch Press私下开的一个玩笑。)
本书既没有美其名曰“用户手册”,也不是关于调试过程认知理论的抽象论文。本书有点介于这两者之间。一方面,确实提供了如何操作GDB、DDD和Eclipse中特定命令的信息;另一方面,讲解并频繁使用了关于调试过程的一些通用原则。
我们之所以选择GDB、DDD和Eclipse,是因为它们在Linux/开源社区中比较流行。本书的示例有点偏向于GDB,不仅仅因为GDB基于文本的性质使得显示在一个页面中更紧凑,而且正如上面的问题所暗示的,我们发现基于文本的命令在调试过程中仍然起着举足轻重的作用。
Eclipse的用途越来越广泛,其远不止仅作为我们这里的调试角色,还提供了各种有吸引力的调试工具。另一方面,DDD占用空间小,而且包括了Eclipse中不具备的某些强大功能。
第1章是概览。很多经验丰富的程序员可能想跳过这一章,但是我们强烈建议大家通读一遍,因为这一章列出了我们针对调试过程推荐的一些简单却有用的通用准则。
第2章着重介绍了调试必不可少的内容——断点,讨论了关于断点的所有细节,包括设置、删除和禁用断点,从一个断点移到另一个断点,查看关于断点的详细信息,等等。
到达断点后会出现什么情况呢?第3章回答了这一问题。我们这里采用的示例涉及遍历树的代码,重点是介绍当到达断点时如何方便地显示树中节点的内容。这里GDB相当出色,提供了一些非常灵活的功能,有助于在每次程序暂停时有效地显示感兴趣的信息。这一章还提供了一个特别优秀的用图形显示树和其他链接数据结构的DDD功能。..
第4章包括了由于段错误而产生的致命运行时错误。我们首先介绍了崩溃时在底层发生了什么事,包括程序的内存分配以及硬件与操作系统的协同作用。对系统知识比较了解的读者可能会跳过这一章,但是我们相信,其他很多读者会得益于这一章介绍的基础知识。然后介绍了核心文件,包括如何创建核心文件,如何使用它们来完成“事后反思”。最后介绍了关于调试会话的一个扩展示例,其中有几个程序错误产生了段错误。
第5章不但介绍并行编程,而且包括网络代码。客户/服务器网络编程可算作并行处理,甚至我们的工具也是并行使用的。比如,在两个窗口中使用GDB,一个窗口用于客户机,另一个窗口用于服务器。由于网络代码涉及系统调用,因此我们用C/C++的errno变量和Linux的strace命令补充我们的调试工具。5.2节涉及线程编程。这里同样首先概述基本内容:分时、进程与线程、竞争条件等。这一章介绍了在GDB、DDD和Eclipse中使用线程的技术细节,并再次讨论了一些要记住的通用原则,比如发生线程上下文切换时的时间选择随机性。5.4节介绍了用流行的MPI和OpenMP程序包进行并行编程,并举了一个OpenMP的扩展示例。
第6章包括其他一些重要主题。如果代码不能编译,那么调试工具将无能为力,因此这一章讨论了处理这种问题的一些方法。然后处理由于缺少必要的库造成的连接失败问题,我们再一次觉得提供一些“理论”是有用的,比如库的类型以及如何将库与主要代码连接。如何调试GUI程序呢?为了简便起见,我们这里坚持采用“半GUI”设置——curses编程,并显示如何让GDB、DDD和Eclipse与curses窗口中的事件交互。
正如前面提到的,可以使用辅助工具使调试过程得到很大的增强,第7章介绍了部分辅助工具,还介绍了errno和strace、lint的一些内容,以及对于有效使用文本编辑器的一些提示。
如今,在学生及已参加工作的程序员中,还有不少“Andrew”,但愿本书能帮助“Andrew们”发现调试工具的好处。但是,我们更希望本书能帮助那些已经使用了调试工具,但还无法确定在什么情况下该做什么事的程序员做出适当的判断。本书也适用于打算进一步学习调试工具及其幕后原理的人。
本书的编辑曾说过,很多调试知识以前都只是在圈子里口口相传,没有正式编著成书。本书将改变这一状况。本书回答了下列问题。
如何调试线程代码?
为什么有时候断点最终出现的位置与原来设置的位置略有偏差?
GDB的until命令为什么有时会跳到意想不到的地方?
如何巧妙使用DDD和Eclipse?
在当今普遍使用GUI的时代,像GDB这样的基于文本的应用程序还有价值吗?
为什么当错误代码超出数组边界时不发生段错误?
为什么要将我们的一个示例数据结构命名为nsp?(不好意思,这只是与我们的出版商No Starch Press私下开的一个玩笑。)
本书既没有美其名曰“用户手册”,也不是关于调试过程认知理论的抽象论文。本书有点介于这两者之间。一方面,确实提供了如何操作GDB、DDD和Eclipse中特定命令的信息;另一方面,讲解并频繁使用了关于调试过程的一些通用原则。
我们之所以选择GDB、DDD和Eclipse,是因为它们在Linux/开源社区中比较流行。本书的示例有点偏向于GDB,不仅仅因为GDB基于文本的性质使得显示在一个页面中更紧凑,而且正如上面的问题所暗示的,我们发现基于文本的命令在调试过程中仍然起着举足轻重的作用。
Eclipse的用途越来越广泛,其远不止仅作为我们这里的调试角色,还提供了各种有吸引力的调试工具。另一方面,DDD占用空间小,而且包括了Eclipse中不具备的某些强大功能。
第1章是概览。很多经验丰富的程序员可能想跳过这一章,但是我们强烈建议大家通读一遍,因为这一章列出了我们针对调试过程推荐的一些简单却有用的通用准则。
第2章着重介绍了调试必不可少的内容——断点,讨论了关于断点的所有细节,包括设置、删除和禁用断点,从一个断点移到另一个断点,查看关于断点的详细信息,等等。
到达断点后会出现什么情况呢?第3章回答了这一问题。我们这里采用的示例涉及遍历树的代码,重点是介绍当到达断点时如何方便地显示树中节点的内容。这里GDB相当出色,提供了一些非常灵活的功能,有助于在每次程序暂停时有效地显示感兴趣的信息。这一章还提供了一个特别优秀的用图形显示树和其他链接数据结构的DDD功能。..
第4章包括了由于段错误而产生的致命运行时错误。我们首先介绍了崩溃时在底层发生了什么事,包括程序的内存分配以及硬件与操作系统的协同作用。对系统知识比较了解的读者可能会跳过这一章,但是我们相信,其他很多读者会得益于这一章介绍的基础知识。然后介绍了核心文件,包括如何创建核心文件,如何使用它们来完成“事后反思”。最后介绍了关于调试会话的一个扩展示例,其中有几个程序错误产生了段错误。
第5章不但介绍并行编程,而且包括网络代码。客户/服务器网络编程可算作并行处理,甚至我们的工具也是并行使用的。比如,在两个窗口中使用GDB,一个窗口用于客户机,另一个窗口用于服务器。由于网络代码涉及系统调用,因此我们用C/C++的errno变量和Linux的strace命令补充我们的调试工具。5.2节涉及线程编程。这里同样首先概述基本内容:分时、进程与线程、竞争条件等。这一章介绍了在GDB、DDD和Eclipse中使用线程的技术细节,并再次讨论了一些要记住的通用原则,比如发生线程上下文切换时的时间选择随机性。5.4节介绍了用流行的MPI和OpenMP程序包进行并行编程,并举了一个OpenMP的扩展示例。
第6章包括其他一些重要主题。如果代码不能编译,那么调试工具将无能为力,因此这一章讨论了处理这种问题的一些方法。然后处理由于缺少必要的库造成的连接失败问题,我们再一次觉得提供一些“理论”是有用的,比如库的类型以及如何将库与主要代码连接。如何调试GUI程序呢?为了简便起见,我们这里坚持采用“半GUI”设置——curses编程,并显示如何让GDB、DDD和Eclipse与curses窗口中的事件交互。
正如前面提到的,可以使用辅助工具使调试过程得到很大的增强,第7章介绍了部分辅助工具,还介绍了errno和strace、lint的一些内容,以及对于有效使用文本编辑器的一些提示。
媒体评论回到顶部↑
“Linux/Unix平台的C程序员将从本书中获益最多,其他平台上的开发者也能从中学到宝贵的调试技术和秘诀。”.
——D. Spinellis,Jolt奖获奖图书《高质量程序设计艺术》作者
“本书是一部软件调试杰作,可以大大提升你的调试技术水平……所有编程入门课程都应该讲授其中的核心内容。我强烈推荐本书!”
——Amazon读者评论...
——D. Spinellis,Jolt奖获奖图书《高质量程序设计艺术》作者
“本书是一部软件调试杰作,可以大大提升你的调试技术水平……所有编程入门课程都应该讲授其中的核心内容。我强烈推荐本书!”
——Amazon读者评论...


点击看大图






加载中...
