下载地址:
下载地址1资源简介:
中文名: 软件调试原名: Software Debugging作者: 张银奎资源格式: PDF版本: 扫描版出版社: 电子工业出版社书号: 9787121064074发行时间: 2008年06月地区: 大陆语言: 简体中文简介: 内容简介: 围绕如何实现高效调试这一主题,本书深入系统地介绍了以调试器为核心的各种软件调试技术。本书共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示例:CpuWhere5.5 性能监视5.6 本章总结第6章 机器检查架构(MCA)6.1 奔腾处理器的机器检查机制6.2 MCA6.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 2249.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. Watson12.6 顶层异常过滤函数12.7 Dr. Watson12.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.014.2 系统错误报告14.3 WER服务器端14.4 WER 2.014.5 CER14.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 Logger16.8 Global Logger Session16.9 Crimson API16.10 本章总结第17章 WHEA17.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标准命令列表索引
飞网下载站,免费下载共享资料,内容涉及教育资源、专业资料、IT资源、娱乐生活、经济管理、办公文书、游戏资料等。