Windows 高级调试
分類: 图书,计算机/网络,操作系统/系统开发,WINDOWS,
作者: (美)赫瓦特等著,聂雪军等译
出 版 社: 机械工业出版社
出版时间: 2009-5-1字数:版次: 1页数: 504印刷时间:开本: 16开印次: 1纸张:I S B N : 9787111266396包装: 平装编辑推荐
本书主要讲解Windows高级调试思想和工具,并涉及一些高级调试主题。
两位来自Microsoft的系统级开发工程师,带着他们15年的实践经验,为读者全面而系统地揭示了Windows调试技术。
内容简介
本书主要讲解Windows高级调试思想和工具,并涉及一些高级调试主题。本书内容主要包括:工具简介、调试器简介、调试器揭密、符号文件与源文件的管理、栈内存破坏、堆内存破坏、安全、进程间通信、资源泄漏、同步、编写定制的调试扩展、64位调试、事后调试、Windows Vista基础以及应用程序验证器的测试设置等。本书内容详实、条理清楚。
本书适合Windows开发人员、Windows测试人员和Windows技术支持人员等参考。
对Windows开发人员来说,很少有任务比调试程序更具挑战性和重要性。然而,人们却往往很难获得一些关干调试技术的可靠而又实用的信息。现在,两位来自Microsoft的系统级开发工程师,带着他们15年的实践经验,为读者全面而系统地揭示了Windows调试技术。
Mario Hewardt和Daniel Pravat介绍了在应用程序的整个生命周期内需要使用到的各种调试技术,并且展示了如何有效地使用Microsoft提供的强大调试器和第三方解决方案。
为了使你尽快地找到切实可行的解决方案,本书内容围绕真实的调试场景来组织,并且通过代码示例来讲解和分析专业开发人员所要面对的各种调试问题。作者还介绍了一些新兴的调试主题,例如Windows操作系统的核心概念、安全。Windows Vista以及64位调试等,每个主题都包含细致入微的阐述。
读完本书,你将能够
掌握当今最强大的Windows调试工具,包括NTSD、CDB、WinDbg、KD以及ADPlus等。
对没有针对调试进行优化的代码进行调试。
理解调试器的”内幕”并高效地管理符号文件和源文件。
调试与栈和堆相关的复杂内存破坏问题。
解决复杂的安全问题。
调试跨进程问题:身份跟踪,RPC调试扩展,以及通过Wireshark来跟踪IPC。
找出并修复资源泄漏,例如内存泄漏和句柄泄漏。
调试常见的线程同步问题。
学习如何编写定制的调试扩展。
通过故障转储来执行”事后调试”,并与Windows错误报告机制集成起来。
通过DebugDiag和调试命令Analyze来自动化调试过程。
无论你是系统层开发人员,还是应用层开发人员,本书都将使你深入理解Windows中的各种调试技术。本书或许在下一个项目中就可以帮你节省数周的工作时间。
目录
译者序
序言
前言
作者简介
第一部分概述
第1章调试工具简介
1.1泄漏诊断工具
1.2Windows调试工具集
1.3UMDH
1.4Microsoft应用程序验证器
1.5全局标志
1.6进程浏览器
1.7Windows-驱动程序开发包
1.8Wireshark
1.9DebugDiag
1.10小结
第2章调试器简介
2.1调试器的基础知识
2.1.1调试器类型
2.1.2调试器命令
2.1.3调试器的配置
2.1.4通过内核态调试器重定向用户态调试器
2.1.5是否使用KD
2.2基本的调试任务
2.2.1键入调试命令
2.2.2解析调试器的提示信息
2.2.3配置和使用符号
2.2.4使用源文件
2.2.5分析命令
2.2.6修改上下文的命令
2.2.7其他的辅助命令
2.2.8示例
2.3远程调试
2.3.1Remote.exe
2.3.2调试服务器
2.3.3进程服务器与内核服务器
2.3.4远程调试中的符号解析
2.3.5远程调试中的源代码解析
2.4调试场景
2.4.1调试非交互式进程(服务或者COMJ服务器)
2.4.2在没有内核态调试器的情况下调试非交互式进程(服务或者COM服务器)
2.5小结
第3章调试器揭密
3.1用户态调试器的内幕
3.1.1操作系统对用户态调试器的支持
3.1.2调试事件的顺序
3.1.3控制来,自调试器的异常和事件
3.1.4内核态调试器中的调试事件处理
3.2控制调试目标
3.2.1断点的工作原理
3.2.2内存访问断点的工作原理
3.2.3处理器跟踪
3.2.4实时调试中的线程状态管理
3.2.5通过用户态调试器来挂起线程
3.3小结
第4章符号文件与源文件的管理
4.1调试符号的管理
4.1.1公有符号的生成
4.1.2在符号库中存储符号
4.1.3在HTTP服务器上共享公有符号
4.2源文件的管理
……
第二章调试
第三章高级主题
媒体评论
“谁说你不能学习别人的经验?本书就包含了丰富而翔实的信息,它们非常清晰地阐述了如何通过一种逻辑的方法来找出和修复程序中的问题。对于那些在Microsoft Windows平台上开发、测试和提供技术支持的人员来说,本书绝对是一本不可或缺的参考手册。”——Bob Wilton,资深工程师就职于Microsoft公司中CPR(Critical Problem Resolution)小组“我有幸与本书的作者在超高要求系统(Extremely Demanding System)领域共事了8年多的时间。本书包含了非常有价值的知识,我们曾经感叹,要是在项目开始之前就知道这些知识该有多好——这位调试大师或许只有2月29号才会告诉你这些知识,因为他只有在这一天的下午才有空;只有亲自去构建和调试那些复杂的系统项目而不是道听途说,才能获得这些宝贵的知识。在大多数书籍中,一些高级主题总是作为‘留给读者的练习’或者‘请参阅其他高级参考书’,而这些主题似乎从来就没有出现过。本书属于那些‘其他高级参考书’。要买就买两本吧,因为你将经常要借一本给其他人。——Raymond McCollum,架构师就职于Microsoft前沿安全产品(Forefront Security Product)部门“由Microsoft的Mario和Daniel合著的这本书是一本非常棒的参考书,面向的读者包括中级调试人员和高级调试人员。本书通过对一些示例进行深入讲解来阐述如何调试各种错综复杂的问题,例如栈破坏和堆破坏等,这使得本书与目前市面上讲解Win32软件调试的众多书籍相比显得卓尔不群。本书的实用性非常高,包含了丰富的调试技巧和策略。”——Kinshuman,开发主管就职于Windows核心操作系统部门“我非常高兴地看到在这本书中包含了大量非常聪明的调试技巧。它不仅介绍了如何对付那些难以诊断的问题,而且还详细解释了在这些技术后面隐藏的底层机制。本书中介绍的实用方法对于人们理解一些关键的Windows领域是非常有帮助的。”——Adrian Marinescu,软件架构师就职于Microsoft“本书详细描述了如何调试和修复软件中的各种问题。本书的内容是根据作者在跟踪各种软件问题时所积累的丰富经验而提炼出来的。本书不仅给出了各种问题的代表性示例,而且还介绍了在分析这些问题时所使用的工具,以及这些工具的详细使用说明。无论是软件开发人员还是软件测试人员,在理解了这些示例后都将受益匪浅。”——Daniel Mihai,软件设计工程师就职于Microsoft开发人员生产率工具(Developer Productivity Tools)部门“我编写了WinDbg符号处理器、符号服务器以及源文件服务器。即便如此,我仍然无法教会我妻子使用WinDbg。她认为这个工具非常难用,因此并不了解这个工具的强大之处。我买了这本书送给她,这样她就可以知道如何使用WinDbg。本书中关于事后调试(Postmortem Debugging)和内存破坏等方面的内容,有效地揭示了在程序出错时的运行环境和操作系统的内部状态。Mario和Daniel在调试领域积累了丰富经验,因为他们经常被要求解决陌生程序中一些莫名其妙的问题。这也是具有工业强度的调试技术的真正意义所在。”——Pat Styles就职于Microsoft
书摘插图
第一部分概述
第1章调试工具简介
许多技术性的书籍和文章都指出了在正确的软件设计和软件工程原则中包含的重要性。有些书侧重于介绍在方法与实践之间的均衡性,而有些书则注重对方法的描述。一些书讨论了面向对象设计、设计模式以及模块化编程等方法,这些方法都能帮助我们编写出更强大的软件。毫无疑问,正确的软件开发方法是所有软件项目获得成功的必要条件。然而,它们却并不是软件项目获得成功的惟一因素。无论我们把软件设计得如何完美,把开发进度安排得如何精确,在软件开发过程中总是出现各种不期而至的问题使我们感到苦恼。例如,不切实际的进度安排、复杂的组件间交互,以及遗留代码等,这些因素使我们无法仅通过一些优秀的开发方法就能做出正确的预测并解决所有的问题。除了这些重要的开发方法之外,我们还必须掌握如何以快速有效的方式来诊断复杂的问题。
本章将介绍一些非常有价值的工具,这些工具不仅在问题的诊断过程中能够带来很大的帮助,而且在处理大多数一般性的问题上也能节省时间和资金。本书讨论的大多数问题都曾因为它们的复杂性而使开发人员们倍感沮丧。有时候,即使开发人员知道如何解决某个具体的问题,但也要付出巨大的努力来跟踪并找出这个问题。然而,大多数开发人员并不知道:其实有一些辅助工具能够在跟踪和解决这些问题时为开发人员带来极大的帮助。除了有助于解决问题之外,这些工具所提供的解决方案也是非常高效的。
……