围绕如何实现高效调试这一主题,本书深入系统地介绍了以调试器为核心的各种软件调试技术。本书共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标准命令列表
索引
本书系统地讨论了数字信号处理的基本原理、主要分析方法及相应的实践途径。书中前三章是数字信号处理的基础,其中包括了时间离散
《胜利小队》内容简介:“了不起的许多多”系列作品由《胜利小队》《竞选风波》《温暖引力》《皇冠小子》四本组成,是冰心奖、陈伯
《两岸新编中国近代史·晚清卷(全2册)》内容简介:改革开放以来,随着大量过去深藏不露的档案文献史料的开放和全球化进程,以及国
《你不知道的JavaScript(下卷)》内容简介:JavaScript这门语言简单易用,很容易上手,但其语言机制复杂微妙,即使是经验丰富的Ja
《邓石如篆书千字文》内容简介:篆书一直以中锋用笔为正宗,形成了铁线篆、玉箸篆这样略显工艺化的成熟书体。早年邓石如临习“二李
“融合与开放的下一代网络丛书”系统地描述了作者在国家973计划、国家863计划、国家杰出青年科学基金和国家自然科学基金等项目的
谁说菜鸟不会数据分析 本书特色 超级畅销书《大话设计模式》作者的新作!用户群更为广泛,写作风格一如既往,技术沉淀更加深厚,势必掀起全民数据结构的热潮!谁说菜鸟不...
“如果你想学习如何用一款统计专家和数据挖掘专家所开发的免费软件包,那就选这本书吧。本书包括大量实际案例,它们充分体现了R软
在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用广泛。本书是C语言的设计者之一DennisM.Ritchie和著名计算机科学家
每天,越來越多人依賴互動式的軟體—桌面應用、Web應用、行動裝置、其他數位裝置。如果這些設計得好,人們就會用得很快樂、安全、
《竹简《文子》研究之回顾与反思》内容简介:本书共分五个章节,依次为:一、竹简《文子》研究;二、竹简《文字》成书年代反思;三
基于机器的智能人脸识别 本书特色 《基于机器的智能人脸识别》是由高等教育出版社出版的。基于机器的智能人脸识别 目录 Introduction 1.1 Face ...
Whateveryourprogramminglanguage,whateveryourplatform,youprobablytapintolinkerand...
消费已成为中国经济主要发展动力,进一步激活消费的消费金融也上升到国家战略,蕴含70万亿蓝海市场,一大批银行、证券、基金、保
《人生谁能无补丁》内容简介:作为著名散文家和学者,梁衡先生曾说,人生不如意事常八九,有低谷、叹息、哭泣与遗憾,但这就是人生
C++程序设计 本书特色 《C++程序设计》是谭浩强教授的又一力作,依据C++标准进行介绍,引导学生学习标准C++,而不仅学习依赖于某一特定环境下的“方言化”的...
《LTE:UMTS长期演进理论与实践》系统、深入、全面地介绍了LTE的背景、动因和技术内容,涵盖了基本理论基础、物理层技术设计、网络
《哈佛家训Ⅳ:脱颖而出的哲学》内容简介:《哈佛家训4:脱颖而出的哲学》的主要内容包括:哲理,是让人的精神新生的原理或概念;哲
《新媒体引流完全操作手册》内容简介:本书详细讲解了腾讯引流、平台引流、百度阿里引流、工具引流、线下引流、视音频引流、爆文引
Ubuntu Linux完全自学教程 本书特色 全程图片讲解轻松推进,100%可实践针对性实例,节省70%学习时间Ubuntu Linux完全自学教程 内容简介...