软件调试

软件调试 pdf epub mobi txt 电子书 下载 2026

出版者:电子工业出版社
作者:张银奎
出品人:
页数:1006
译者:
出版时间:2008-6
价格:128.00元
装帧:平装
isbn号码:9787121064074
丛书系列:
图书标签:
  • 调试
  • 软件调试
  • debug
  • 计算机
  • 编程
  • 软件开发
  • debugging
  • windows
  • 软件调试
  • 编程
  • 错误排查
  • 开发工具
  • 代码调试
  • 故障分析
  • 程序员
  • 调试技巧
  • 软件工程
  • 开发实践
想要找书就要到 图书目录大全
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

围绕如何实现高效调试这一主题,本书深入系统地介绍了以调试器为核心的各种软件调试技术。本书共30章,分为6篇。第1篇介绍了软件调试的概况和简要历史。第2篇以英特尔架构(IA)的CPU为例,介绍了计算机系统的硬件核心所提供的调试支持,包括异常、断点指令、单步执行标志、分支监视、JTAG和MCE等。第3篇以Windows操作系统为例,介绍了计算机系统的软件核心中的调试设施,包括内核调试引擎、用户态调试子系统、异常处理、验证器、错误报告、事件追踪、故障转储、硬件错误处理等。第4篇以Visual C/C++编译器为例,介绍了生产软件的主要工具的调试支持,重点讨论了编译期检查、运行期检查及调试符号。第5篇讨论了软件的可调试性,探讨了如何在软件架构设计和软件开发过程中加入调试支持,使软件更容易被调试。在前5篇内容的基础上,第6篇首先介绍了调试器的发展历史、典型功能和实现方法,然后全面介绍了WinDBG调试器,包括它的模块结构、工作模型、使用方法和主要调试功能的实现细节。.

本书是对软件调试技术在过去50年中所取得成就的全面展示,也是对作者本人在软件设计和系统开发第一线奋战10多年的经验总结。本书理论与实践紧密结合,选取了大量具有代表性和普遍意义的技术细节进行讨论,是学习软件调试技术的宝贵资料,适合每一位希望深刻理解软件和自由驾驭软件的人阅读,特别是从事软件开发、测试、支持的技术人员和有关的研究人员。...

作者简介

张银奎,高级软件工程师,高端调试网站主要创始人,《程序员 》杂志“软件调试”专栏作者

目录信息

第1篇 绪论
第1章 软件调试基础
1.1 简介
1.2 基本特征
1.3 简要历史
1.4 分类
1.5 调试技术概览
1.6 错误与缺欠
1.7 与软件工程的关系
1.8 本章总结
第2篇 CPU的调试支持
第2章 CPU基础
2.1 指令和指令集
2.2 IA-32处理器
2.3 CPU的操作模式
2.4 寄存器
2.5 理解保护模式
2.6 段机制
2.7 分页机制(Paging)
2.8 系统概貌
2.9 本章总结
第3章 中断和异常
3.1 概念和差异
3.2 异常的分类
3.3 异常例析
3.4 中断/异常优先级
3.5 中断/异常处理
3.6 本章总结
第4章 断点和单步执行
4.1 软件断点
4.2 硬件断点
4.3 陷阱标志
4.4 实模式调试器例析
4.5 本章总结
第5章 分支记录和性能监视
5.1 分支监视概览
5.2 使用寄存器的分支记录
5.3 使用内存的分支记录
5.4 DS示例:CpuWhere
5.5 性能监视
5.6 本章总结
第6章 机器检查架构(MCA)
6.1 奔腾处理器的机器检查机制
6.2 MCA
6.3 编写MCA软件
6.4 本章总结
第7章 JTAG调试
7.1 简介
7.2 JTAG原理
7.3 JTAG应用
7.4 IA-32处理器的JTAG支持
7.5 本章总结
第3篇 操作系统的调试支持
第8章 Windows概要
8.1 简介
8.2 进程和进程空间
8.3 内核模式和用户模式
8.4 架构和系统部件
8.5 本章总结
第9章 用户态调试模型
9.1 概览
9.2 采集调试消息
9.3 发送调试消息
9.4 调试子系统服务器(XP之后)
9.5 调试子系统服务器(XP之前)
9.6 比较两种模型
9.7 NTDLL中的调试支持例程
9.8 调试API 224
9.9 本章总结
第10章 用户态调试过程
10.1 调试器进程
10.2 被调试进程
10.3 从调试器中启动被调试程序
10.4 附加到已经启动的进程
10.5 处理调试事件
10.6 中断到调试器
10.7 输出调试字符串
10.8 终止调试会话
10.9 本章总结
第11章 中断和异常管理
11.1 中断描述符表
11.2 异常的描述和登记
11.3 异常分发过程
11.4 结构化异常处理(SEH)
11.5 向量化异常处理(VEH)
11.6 本章总结
第12章 未处理异常和JIT调试
12.1 简介
12.2 默认的异常处理器
12.3 未处理异常过滤函数
12.4 应用程序错误对话框
12.5 JIT调试和Dr. Watson
12.6 顶层异常过滤函数
12.7 Dr. Watson
12.8 DRWTSN32的日志文件
12.9 用户态转储文件
12.10 本章总结
第13章 硬错误和蓝屏
13.1 硬错误提示
13.2 蓝屏终止(BSOD)
13.3 系统转储文件
13.4 分析系统转储文件
13.5 辅助的错误提示方法
13.6 配置错误提示机制
13.7 防止滥用错误提示机制
13.8 本章总结
第14章 错误报告
14.1 WER 1.0
14.2 系统错误报告
14.3 WER服务器端
14.4 WER 2.0
14.5 CER
14.6 本章总结
第15章 日志
15.1 日志简介
15.2 ELF的架构
15.3 ELF的数据组织
15.4 察看和使用ELF日志
15.5 CLFS的组成和原理
15.6 CLFS的使用方法
15.7 本章总结
第16章 事件追踪
16.1 简介
16.2 ETW的架构
16.3 提供ETW消息
16.4 控制ETW会话
16.5 消耗ETW消息
16.6 格式描述
16.7 NT Kernel Logger
16.8 Global Logger Session
16.9 Crimson API
16.10 本章总结
第17章 WHEA
17.1 目标和架构
17.2 错误源
17.3 错误处理过程
17.4 错误持久化
17.5 注入错误
17.6 本章总结
第18章 内核调试引擎
18.1 概览
18.2 连接
18.3 启用
18.4 初始化
18.5 内核调试协议
18.6 与内核交互
18.7 建立和维持连接
18.8 本地内核调试
18.9 本章总结
第19章 Windows的验证机制
19.1 简介
19.2 驱动验证器的工作原理
19.3 使用驱动验证器
19.4 应用程序验证器的工作原理
19.5 使用应用程序验证器
19.6 本章总结
第4篇 编译器的调试支持
第20章 编译和编译期检查
20.1 程序的构建过程
20.2 编译
20.3 Visual C++编译器
20.4 编译错误和警告
20.5 编译期检查
20.6 标准标注语言
20.7 本章总结
第21章 运行库和运行期检查
21.1 C/C++运行库
21.2 链接运行库
21.3 运行库的初始化和清理
21.4 运行期检查
21.5 报告运行期检查错误
21.6 本章总结
第22章 栈和函数调用
22.1 简介
22.2 栈的创建过程
22.3 CALL和RET指令
22.4 局部变量和栈帧
22.5 帧指针省略(FPO)
22.6 栈指针检查
22.7 调用协定
22.8 栈空间的增长和溢出
22.9 栈下溢
22.10 缓冲区溢出
22.11 变量检查
22.12 基于Cookie的安全检查
22.13 本章总结
第23章 堆和堆检查
23.1 理解堆
23.2 堆的创建和销毁
23.3 分配和释放堆块
23.4 堆的内部结构
23.5 低碎片堆(LFH)
23.6 堆的调试支持
23.7 栈回溯数据库
23.8 堆溢出和检测
23.9 页堆
23.10 准页堆
23.11 CRT堆
23.12 CRT堆的调试堆块
23.13 CRT堆的调试功能
23.14 堆块转储
23.15 泄漏转储
23.16 本章总结
第24章 异常处理代码的编译
24.1 概览
24.2 FS:[0]链条
24.3 遍历FS:[0]链条
24.4 执行异常处理函数
24.5 __try{}__except()结构
24.6 安全问题
24.7 本章总结
第25章 调试符号
25.1 名称修饰
25.2 调试信息的存储格式
25.3 目标文件中的调试信息
25.4 PE文件中的调试信息
25.5 DBG文件
25.6 PDB文件
25.7 有关的编译和链接选项
25.8 PDB文件中的数据表
25.9 本章总结
第5篇 可调试性
第26章 可调试性概览
26.1 简介
26.2 Showstopper和未雨绸缪
26.3 基本原则
26.4 不可调试代码
26.5 可调试性例析
26.6 与安全、性能和商业秘密的关系
26.7 本章总结
第27章 可调试性的实现
27.1 角色和职责
27.2 可调试架构
27.3 通过栈回溯实现可追溯性
27.4 数据的可追溯性
27.5 可观察性的实现
27.6 自检和自动报告
27.7 本章总结
第6篇 调试器
第28章 调试器概览
28.1 TX-0计算机和FLIT调试器
28.2 小型机和DDT调试器
28.3 个人计算机和它的调试器
28.4 调试器的功能
28.5 分类标准
28.6 实现模型
28.7 经典架构
28.8 HPD标准
28.9 本章总结
第29章 WinDBG及其实现
29.1 WinDBG溯源
29.2 C阶段的架构
29.3 重构
29.4 调试器引擎的架构
29.5 调试目标
29.6 调试会话
29.7 接收和处理命令
29.8 本章总结
第30章 WinDBG用法详解
30.1 工作空间
30.2 命令概览
30.3 用户界面
30.4 输入和执行命令
30.5 建立调试会话
30.6 终止调试会话
30.7 理解上下文
30.8 调试符号
30.9 事件处理
30.10 控制调试目标
30.11 单步执行
30.12 使用断点
30.13 控制进程和线程
30.14 观察栈
30.15 分析内存
30.16 遍历链表
30.17 调用目标程序的函数
30.18 命令程序
30.19 本章总结
附录A 示例程序列表
附录B WinDBG标准命令列表
索引
· · · · · · (收起)

读后感

评分

这本书和《格蠹汇编》是姊妹篇,但是后者是案例分析,更加偏实际,这本书更加偏向理论,篇幅上洋洋洒洒1000余页,内容也颇见功力,很多东西我之前不知道、不了解,看了之后才知晓。 这是我在简书上的阅读笔记(http://www.jianshu.com/p/6ed96f49422c),目前刚刚开始看,后面...  

评分

这本书和《格蠹汇编》是姊妹篇,但是后者是案例分析,更加偏实际,这本书更加偏向理论,篇幅上洋洋洒洒1000余页,内容也颇见功力,很多东西我之前不知道、不了解,看了之后才知晓。 这是我在简书上的阅读笔记(http://www.jianshu.com/p/6ed96f49422c),目前刚刚开始看,后面...  

评分

首先要肯定张老师写了一本非常好的书,从您的书中学到了不少东西,尤其是一些调试机理的东西对自己收获很大。曾经的曾经对调试器很感兴趣,觉得他是个很神秘的东西就象以前对操作系统内核的感觉似的。国内TRW的作者刘涛涛先生,Syser的作者吴岩峰先生都做出过自己的debugger,...  

评分

还没看完, 的确对得起"著"这个字. 和Intel手册对应着看, 对Intel的历史了解的真多啊, 这不是Intel的员工看来还真不行. 目前最大的感受就是作者对Intel手册详细阅读, 研究之后的一本读后感. 如果能配上Intel中的图就更好了, 总是觉得想看图示的时候, 需要到Intel的手册中去...  

评分

我来说个缺点。东西比较多,但并不是每一章对每个人都适用,太分散了点。 我买这本书主要是为了Windbg的配置、使用方法。这个没啥深度,不过,除了这本书还真没找到好的中文资料。 前面讲的一些基础知识,学习一下也是有帮助的;但是至于如何设计debugger之类的内容就有点不...  

用户评价

评分

坦白说,这本书的深度远超出了我最初的预期,它更像是一本“高级工程师进阶指南”,而不是一本入门级别的速查手册。对于初学者来说,可能需要配合一些基础的操作系统和编译原理知识才能完全跟上作者的思路。但是,对于那些已经能熟练使用IDE进行日常编码,却渴望突破技术瓶颈、理解软件运行时“黑箱”的资深开发者而言,这本书简直是量身定做的。它没有敷衍地介绍快捷键的使用,而是深入到了内核级别的数据结构和中断处理机制,讲解得鞭辟入里。特别是关于内存保护和异常处理链的论述,结构之严谨,逻辑之清晰,让我叹为观止。读完后,我感觉自己对软件运行的底层机制有了一种全新的敬畏感,那种对“一切皆有可能出错”的深刻理解,会潜移默化地影响我未来编写代码的风格,让我更加注重健壮性和容错性。

评分

这本书的封面设计非常抓人眼球,那种深邃的蓝色调配上锐利的字体,一下子就让人感觉内容会很硬核,充满了技术感。我本来对编程领域的很多底层原理了解得比较模糊,总觉得是那种只有大神才懂的知识。结果翻开第一章,我就被作者那种循序渐进的讲解方式给“套牢”了。它没有一上来就抛出晦涩难懂的概念,而是从一个我们日常开发中最常遇到的“程序崩溃”场景入手,像剥洋葱一样,一层一层地揭示了错误发生的机制。我特别喜欢它对内存泄漏和栈溢出的比喻,那种生动形象的描述,让原本冰冷的专业术语瞬间变得立体起来。读完关于断点调试那一章,我感觉自己像个侦探,以前那些模棱两可的Bug,现在似乎都有了清晰的追踪路径。这本书的厉害之处在于,它不仅仅是告诉你“怎么做”,更重要的是让你理解“为什么这么做”,这才是真正提升功力的关键。对于正在努力提升自己工程能力的同行来说,这本书绝对是案头必备的工具书,翻阅率肯定会非常高。

评分

我这本书主要是在周末和晚上阅读的,每次打开都会有一种“沉浸式学习”的感觉。它不仅仅是一本工具书,更像是一部关于“解决问题哲学”的著作。作者在开篇就强调了“假设驱动验证”的重要性,这个理念贯穿了全书的各个章节。书中所有的案例都极具代表性,它们并非为了展示高超的技术,而是为了模拟真实项目中可能遇到的各种“疑难杂症”。我最近正好在处理一个困扰团队很久的偶发性崩溃问题,尝试了书里介绍的一种基于“时间线回溯”的分析方法后,竟然找到了那个隐藏在毫秒级时间窗口内的竞争条件错误。这种即学即用的强大效果,让我对这本书的价值有了最直观的认识。它不仅为你提供了工具箱,更教会了你如何磨砺自己的“工具心”——如何保持怀疑精神,如何系统地排除干扰因素,这是技术人员最宝贵的财富。

评分

说实话,我刚拿到这本厚厚的书时,心里是有点打怵的,担心内容会过于理论化,读起来像是在啃一本大学教材。但实践证明,我的顾虑完全是多余的。作者的叙事风格带着一种老工程师特有的沉稳和幽默感,读起来完全没有枯燥感。比如在讲到如何使用操作系统自带的工具进行性能分析时,他会穿插一些自己早年踩过的“大坑”,那种“我当年也是这么过来的”的亲切感,立刻拉近了与读者的距离。我印象最深的是关于多线程并发问题的处理部分,以往我对这些问题的理解都是碎片化的,看完这一章节,我感觉脑子里那些错综复杂的锁和信号量突然串联成了一个清晰的逻辑网络。作者对不同平台(比如Linux和Windows)在底层实现上的差异做了细致的对比,这种对细节的把控,显示出作者深厚的实战经验。这本书更像是一份经验传承的宝典,而不是一本冷冰冰的说明书,它教会你的,是面对未知复杂问题时应该采取的系统性思维方式。

评分

这本书的排版和插图设计非常出色,这是我很少会在技术书籍中注意到的细节,但它确实极大地影响了阅读体验。很多技术书为了追求信息密度,图表画得密密麻麻,看得人眼晕。而这本在关键概念的图示上,几乎做到了“大道至简”。例如,它用动态的流程图来展示程序执行流的跳转过程,每一个关键的寄存器变化都被清晰地标注出来。我尤其欣赏它在介绍反汇编代码分析时的布局:源代码、汇编代码和对应的注释被巧妙地放在一起,不同颜色的标记帮你快速锁定关注点。这让我在学习如何阅读和理解底层机器码时,少走了很多弯路。以前我总觉得汇编是遥不可及的晦涩语言,但通过这本书的引导,我发现它其实是理解CPU工作方式的钥匙。这种对阅读体验的重视,让长时间的技术深潜不再是一件痛苦的事情,反而成了一种享受。

评分

太厚了,沦为工具书

评分

张老师,你写的是神马?是软件调试哇?

评分

知识型的书,作者讲的很细!

评分

还是有很多不懂的地方,需要之后慢慢再重新读

评分

: TP311.5/1284

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.wenda123.org All Rights Reserved. 图书目录大全 版权所有