.NET高级调试(畅销书《windows高级调试》姊妹篇)
基本信息
- 作者: (美)Mario Hewardt [作译者介绍]
- 译者: 聂雪军
- 丛书名: 开发人员专业技术丛书
- 出版社:机械工业出版社
- ISBN:9787111320852
- 上架时间:2010-11-17
- 出版日期:2011 年1月
- 开本:16开
- 页码:379
- 版次:1-1
- 所属分类:
计算机 > 软件与程序设计 > .NET > 综合
编辑推荐
·畅销书《Windows高级调试》姊妹篇
·.NET调试权威参考书
·涉及.NET CLR 4.0最新调试功能
推荐阅读
内容简介回到顶部↑
作译者回到顶部↑
本书提供作译者介绍
www.BrookeClark.comMario Hewardt是《Windows高级调试》的作者之一,他是微软公司的资深开发经理。他拥有11年的工作经验,从Windows 98一直到Windows Vista。在过去的几年中,Mario主要从事SaaS领域的工作,开发了Asset Inventory Service,这个服务用于帮助用户跟踪他们的资产清单。他目前正在领导一个团队,为下一代Microsoft在线管理服务开发核心支撑平台。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
对本书的赞誉
译者序
序
前言
关于作者
第一部分 简介
第1章 调试工具简介
1.1windows调试工具集
1.2.net2.0可再发行组件
1.3.net2.0sdk
1.4sos
1.5sosex
1.6clr分析器
1.7性能计数器
1.8.net反编译器
1.9powerdbg
1.10托管调试助手
1.11小结
第2章 clr基础
2.1高层概览
译者序
序
前言
关于作者
第一部分 简介
第1章 调试工具简介
1.1windows调试工具集
1.2.net2.0可再发行组件
1.3.net2.0sdk
1.4sos
1.5sosex
1.6clr分析器
1.7性能计数器
1.8.net反编译器
1.9powerdbg
1.10托管调试助手
1.11小结
第2章 clr基础
2.1高层概览
译者序回到顶部↑
本书是Mario Hewardt继《Windows高级调试》之后推出的又一部力作。.NET框架为开发人员隐藏了底层系统的复杂性,例如自动化内存管理机制使得开发人员无须关心内存的释放与回收,从而极大地提升软件开发效率。然而,这种抽象也使得一些问题调试起来更为困难,因此需要了解的底层技术细节也变得更多。本书以非托管调试器(包括WinDBG、NTSD和CDB)为基础,详细介绍了.NET框架中关键组件的运作原理及其与.NET应用程序中一些常见问题的关联,并通过丰富的示例来阐述在调试不同问题时所应采取的策略、步骤以及工具。
作为《Windows高级调试》的姊妹篇,本书的目的同样是为了将一些有价值的调试思路和调试工具推荐给软件开发人员,以提高开发人员的调试效率。本书的特点主要有:
深入介绍了.NET中关键组件的内部运作原理,包括CLR垃圾收集器、程序集加载器、应用程序域以及类型元数据等。在调试.NET应用程序时,对.NET内部运行机制了解得越清楚,就越能控制程序的运行状态,调试效率也就越高,这与调试Windows系统应用程序或者其他任何类型程序的道理是相通的。
通过丰富的示例来讲解调试过程。本书分析了.NET应用程序在程序集加载、托管堆、同步以及互用性等方面的一些常见问题。对于每类问题,作者首先给出了问题的外在表现,然后介绍如何做出合理假设以及采用相应的调试策略来进行验证,并最终找出问题的根源。对调试过程中的每个步骤,作者都给出了非常清晰的讲解和分析,使得读者更容易掌握书中内容。
重点介绍了两个调试器扩展SOS和SOSEX。在本书各章的内容中穿插对SOS与SOSEX中各个命令的介绍,包括命令的语法格式、应用场合以及使用技巧等。这些内容在其他书籍中是很少出现的。
此外,本书还给出了一些高级调试主题,包括崩溃转储文件的生成、事后调试,并介绍了一些辅助调试工具,例如PowerDbg和CLR分析器等。这些内容都为开发人员调试复杂问题提供了必要的基础知识。在最后一章还介绍了在.NET 40中引入的一些新功能。
本书保持了《Windows高级调试》的行文风格与内容组织方式,围绕核心的调试思路,采用了由浅入深、由表及里的讲解方式,并辅以丰富的示例和详细的分析,使读者逐步掌握.NET应用程序的调试技巧。本书的技术性较强,需要读者对.NET框架的底层架构和组件有一定的了解,并且具备一定的C#编程基础。作者Mario Hewardt是微软公司的资深工程师,他在调试领域已经工作了十余年。本书汇聚了作者多年来的调试实践经验,对于.NET开发人员来说是一本不可多得的参考手册。
参与本书翻译工作的还有李杨、吴汉平、徐光景、童胜汉、陈军、胡凯、刘红、张玮、陈红、李斌、李勇涛、王海涛、周云波、彭敏才和张世锋等。由于译者的水平和时间有限,翻译中的疏漏和错误在所难免,还望读者和同行不吝指正。
聂雪军
2010年8月于武汉
作为《Windows高级调试》的姊妹篇,本书的目的同样是为了将一些有价值的调试思路和调试工具推荐给软件开发人员,以提高开发人员的调试效率。本书的特点主要有:
深入介绍了.NET中关键组件的内部运作原理,包括CLR垃圾收集器、程序集加载器、应用程序域以及类型元数据等。在调试.NET应用程序时,对.NET内部运行机制了解得越清楚,就越能控制程序的运行状态,调试效率也就越高,这与调试Windows系统应用程序或者其他任何类型程序的道理是相通的。
通过丰富的示例来讲解调试过程。本书分析了.NET应用程序在程序集加载、托管堆、同步以及互用性等方面的一些常见问题。对于每类问题,作者首先给出了问题的外在表现,然后介绍如何做出合理假设以及采用相应的调试策略来进行验证,并最终找出问题的根源。对调试过程中的每个步骤,作者都给出了非常清晰的讲解和分析,使得读者更容易掌握书中内容。
重点介绍了两个调试器扩展SOS和SOSEX。在本书各章的内容中穿插对SOS与SOSEX中各个命令的介绍,包括命令的语法格式、应用场合以及使用技巧等。这些内容在其他书籍中是很少出现的。
此外,本书还给出了一些高级调试主题,包括崩溃转储文件的生成、事后调试,并介绍了一些辅助调试工具,例如PowerDbg和CLR分析器等。这些内容都为开发人员调试复杂问题提供了必要的基础知识。在最后一章还介绍了在.NET 40中引入的一些新功能。
本书保持了《Windows高级调试》的行文风格与内容组织方式,围绕核心的调试思路,采用了由浅入深、由表及里的讲解方式,并辅以丰富的示例和详细的分析,使读者逐步掌握.NET应用程序的调试技巧。本书的技术性较强,需要读者对.NET框架的底层架构和组件有一定的了解,并且具备一定的C#编程基础。作者Mario Hewardt是微软公司的资深工程师,他在调试领域已经工作了十余年。本书汇聚了作者多年来的调试实践经验,对于.NET开发人员来说是一本不可多得的参考手册。
参与本书翻译工作的还有李杨、吴汉平、徐光景、童胜汉、陈军、胡凯、刘红、张玮、陈红、李斌、李勇涛、王海涛、周云波、彭敏才和张世锋等。由于译者的水平和时间有限,翻译中的疏漏和错误在所难免,还望读者和同行不吝指正。
聂雪军
2010年8月于武汉
前言回到顶部↑
自从2007年底写完《Windows高级调试》(由机械工业出版社于2009年5月出版——译者注)一书后,许多读者都来信希望我再写一本关于.NET调试的书籍。最初在《Windows高级调试》中确实包含了一章内容专门介绍.NET调试,但最终还是去掉了这章,因为我认为,仅有一章的篇幅无法涵盖.NET调试的所有内容,这给读者带来的只能是更多的疑问而不是启迪。.NET已经成为众多开发人员的首选平台。根据统计数据表明,使用C#的开发人员与使用C++的开发人员在数量上基本相当。要想在.NET开发中取得成功,那么就需要知道如何正确地应对在开发中遇到的各种问题和挑战。
为什么在一本介绍.NET调试的书中使用了WinDBG、NTSD以及CDB等这些调试器?显然还有其他的调试器可以使用(有些调试器甚至有着更高的用户友好性)。初看上去,使用非托管调试器似乎有些棘手,但如果将它们的功能完全发挥出来,那么在分析一些复杂的问题时将节约大量的时间。部分原因是当使用非托管调试器时,更容易收集CLR本身(即.NET运行时)的关键内部信息,并可以根据这些信息来分析问题的原因。这些信息包括垃圾收集器、互用性层、同步原语等。这种信息不仅会在许多调试任务中起到关键作用,而且还是一种很好的学习资料,因为它给出了对运行时架构的详细描述。最后,在某些情况下(随着目前 “互联”解决方案越来越多),需要使用一种零痕迹(ZEOR foot print)调试器。这种“更友好的”调试器通常需要在本地进行安装,在这个过程中将把所需的二进制文件复制到目标机器上,并在系统的不同位置保存配置信息等。如果在某台机器上不允许修改配置信息(例如在用户机器或者数据中心的机器上),那么唯一可行的方法就是使用非托管调试器,因为这种调试器不需要修改配置信息。
本书弥补了调试领域中的这种缺陷,并重点介绍了如何在CLR环境中发挥非托管调试器的功能。本书采用了与实践紧密相结合的讲解方式,使用真实的调试任务示例,以确保读者不仅可以学习书中介绍的内容,而且还能获得实际的体验。我希望读者在阅读本书时获得的乐趣与我在写这本书时获得的乐趣一样。
本书的目标读者
如果在分析问题时知道该采用哪些工具,并且知道如何对不同的问题进行分类,那么通常可以开发出高质量的软件产品,并降低在技术支持上的开销。然而,尽管我们已经竭尽全力消除产品中的错误,但在客户机器上仍然会冒出一些意料之外的问题,只有知道如何在这种情况下分析这些问题,才能有效地避免给客户造成麻烦或者停机。所有的软件工程师都有必要了解在各种不同的环境中应该使用哪些工具来分析问题。如果掌握了调试的技巧,那么产品质量将得到极大提升,而且公司的形象也会由于软件的高质量和高可靠性而得到提升。
软件开发工程师
我曾看到许多开发人员努力解决各种复杂的错误,并且最终花费数天(有时候甚至是数星期)时间来缩小问题的范围以及找到问题的根源。在大多数时候,我都会询问开发人员使用了哪些工具。得到的答案通常大同小异:反复进行代码审查和跟踪,直至最终找出问题。代码审查和有针对性的跟踪对于分析错误来说固然重要,但它们通常也是非常耗时的。面对现实吧!假使我们能够获得在分析代码问题时需要的所有信息,那么将不需要使用调试器。然而,实际情况是,在某些情况中仅凭代码跟踪不足以解决问题,而是需要将调试器附载到出现问题的进程上。 在许多时候,当我告诉开发人员某个工具可以极大地降低某种问题的分析时间后,开发人员会吃惊地发现居然有这种工具存在。
本书的目标读者之一就是那些在.NET平台上编写代码以及分析复杂问题的开发人员。能够深入地理解哪些工具可以帮助开发人员找出一些复杂且耗时的问题,对于产品的成功来说非常重要。在开发过程中,知道使用哪些工具以及启动哪些配置,对于获得成功来说是非常关键的。
质量保证工程师
质量保证(Quality Assurance,QA)的目的是找出开发人员在代码中出现的问题。详细的测试计划以及完全自动化的测试流程都能使质量保证工程师们以高效的方式来测试各个组件。正如了解调试工具和配置信息对开发人员非常重要,这对于质量保证工程师也同样重要。在测试过程中,他们可能会遇到各种问题,如果在测试过程中能使用正确的工具,那么将帮助他们以及开发人员在解决问题上节约大量的时间。如果在进行测试时没有使用正确的工具,那么在重新启动测试流程(并且打开这个工具)时可能最终发现这不是一个可重现的问题。在本书中介绍的调试器和工具能够提高质量保证工程师的工作效率,并且帮助整个产品团队更快地获得结果。
产品支持工程师
产品支持工程师面临的情况与软件开发工程师和质量保证工程师遇到的情况非常相似。关键的区别在于他们所处的环境不同。他们不仅要解决客户的问题,而且经常必须面对来自多个地方的代码(即不仅仅是产品的代码)。此外,产品支持工程师通常只能使用进程的静态快照,而无法进行实时调试,这就使得找到问题的根源更加困难。在这些情况下,如果知道如何使用调试器以及相应的工具,那么就不需要多次往返于公司与客户之间(这不仅会带来很高的成本开销,而且很容易令人沮丧),并且能够立即解决问题。
运行工程师
随着越来越多的软件移动到云中(一种基于服务的提供方式),越来越多的代码是在专门的数据中心运行,而不是在客户的机器上运行。负责这些服务正常运行的工程师们就被称为运行工程师。运行工程师面临的关键挑战之一是,要解决所有使服务无法最优化运行的问题。通常,这意味着要尽快地解决问题。如果运行团队无法解决某个问题,那么产品团队会参与进来,这将是一个耗时的过程,因为产品团队可能要反复地指导运行团队分析这个问题。通过使用正确的工具,运行团队可以解决遇到的大部分问题,而无需将这些问题提交给产品团队,因此节约了双方的时间;并且最重要的是,客户在使用服务时遇到的停机时间也将更短。
预备知识
虽然本书介绍的是如何使用非托管调试器,但重点在于介绍如何调试.NET代码,而不是非托管调试的一些基本步骤。第3章将会简要介绍一些主题,例如如何将调试附载到目标进程,设置符号路径以及设置断点等,但并没有给出详细介绍。关于非托管调试器以及非托管代码调试的进一步介绍可以参考我之前写的一本书:Mario Hewardt和Daniel Pravat,《Advanced Windows Debugging》, Boston,MA:AddisonWesley,2007。1中文版为《Windows高级调试》,由机械工业出版社于2009年5月出版。——译者注
此外,还需要深入理解C#,因为所有的示例代码都是采用C#编写的。 在学习C#时可以使用下面这本书:Mark Michaelis,《Essential C# 20》, Boston, MA: AddisonWesley, 2006。
虽然读者需要预先具备C#的知识,但并不需要深入了解CLR。本书不仅介绍了如何调试.NET程序,还对.NET平台中大量的核心代码给出了详细解释,这些信息是获得调试成功的重要基础。
本书的组织结构
本书分为三个部分,下面介绍每一部分包含的内容。
为什么在一本介绍.NET调试的书中使用了WinDBG、NTSD以及CDB等这些调试器?显然还有其他的调试器可以使用(有些调试器甚至有着更高的用户友好性)。初看上去,使用非托管调试器似乎有些棘手,但如果将它们的功能完全发挥出来,那么在分析一些复杂的问题时将节约大量的时间。部分原因是当使用非托管调试器时,更容易收集CLR本身(即.NET运行时)的关键内部信息,并可以根据这些信息来分析问题的原因。这些信息包括垃圾收集器、互用性层、同步原语等。这种信息不仅会在许多调试任务中起到关键作用,而且还是一种很好的学习资料,因为它给出了对运行时架构的详细描述。最后,在某些情况下(随着目前 “互联”解决方案越来越多),需要使用一种零痕迹(ZEOR foot print)调试器。这种“更友好的”调试器通常需要在本地进行安装,在这个过程中将把所需的二进制文件复制到目标机器上,并在系统的不同位置保存配置信息等。如果在某台机器上不允许修改配置信息(例如在用户机器或者数据中心的机器上),那么唯一可行的方法就是使用非托管调试器,因为这种调试器不需要修改配置信息。
本书弥补了调试领域中的这种缺陷,并重点介绍了如何在CLR环境中发挥非托管调试器的功能。本书采用了与实践紧密相结合的讲解方式,使用真实的调试任务示例,以确保读者不仅可以学习书中介绍的内容,而且还能获得实际的体验。我希望读者在阅读本书时获得的乐趣与我在写这本书时获得的乐趣一样。
本书的目标读者
如果在分析问题时知道该采用哪些工具,并且知道如何对不同的问题进行分类,那么通常可以开发出高质量的软件产品,并降低在技术支持上的开销。然而,尽管我们已经竭尽全力消除产品中的错误,但在客户机器上仍然会冒出一些意料之外的问题,只有知道如何在这种情况下分析这些问题,才能有效地避免给客户造成麻烦或者停机。所有的软件工程师都有必要了解在各种不同的环境中应该使用哪些工具来分析问题。如果掌握了调试的技巧,那么产品质量将得到极大提升,而且公司的形象也会由于软件的高质量和高可靠性而得到提升。
软件开发工程师
我曾看到许多开发人员努力解决各种复杂的错误,并且最终花费数天(有时候甚至是数星期)时间来缩小问题的范围以及找到问题的根源。在大多数时候,我都会询问开发人员使用了哪些工具。得到的答案通常大同小异:反复进行代码审查和跟踪,直至最终找出问题。代码审查和有针对性的跟踪对于分析错误来说固然重要,但它们通常也是非常耗时的。面对现实吧!假使我们能够获得在分析代码问题时需要的所有信息,那么将不需要使用调试器。然而,实际情况是,在某些情况中仅凭代码跟踪不足以解决问题,而是需要将调试器附载到出现问题的进程上。 在许多时候,当我告诉开发人员某个工具可以极大地降低某种问题的分析时间后,开发人员会吃惊地发现居然有这种工具存在。
本书的目标读者之一就是那些在.NET平台上编写代码以及分析复杂问题的开发人员。能够深入地理解哪些工具可以帮助开发人员找出一些复杂且耗时的问题,对于产品的成功来说非常重要。在开发过程中,知道使用哪些工具以及启动哪些配置,对于获得成功来说是非常关键的。
质量保证工程师
质量保证(Quality Assurance,QA)的目的是找出开发人员在代码中出现的问题。详细的测试计划以及完全自动化的测试流程都能使质量保证工程师们以高效的方式来测试各个组件。正如了解调试工具和配置信息对开发人员非常重要,这对于质量保证工程师也同样重要。在测试过程中,他们可能会遇到各种问题,如果在测试过程中能使用正确的工具,那么将帮助他们以及开发人员在解决问题上节约大量的时间。如果在进行测试时没有使用正确的工具,那么在重新启动测试流程(并且打开这个工具)时可能最终发现这不是一个可重现的问题。在本书中介绍的调试器和工具能够提高质量保证工程师的工作效率,并且帮助整个产品团队更快地获得结果。
产品支持工程师
产品支持工程师面临的情况与软件开发工程师和质量保证工程师遇到的情况非常相似。关键的区别在于他们所处的环境不同。他们不仅要解决客户的问题,而且经常必须面对来自多个地方的代码(即不仅仅是产品的代码)。此外,产品支持工程师通常只能使用进程的静态快照,而无法进行实时调试,这就使得找到问题的根源更加困难。在这些情况下,如果知道如何使用调试器以及相应的工具,那么就不需要多次往返于公司与客户之间(这不仅会带来很高的成本开销,而且很容易令人沮丧),并且能够立即解决问题。
运行工程师
随着越来越多的软件移动到云中(一种基于服务的提供方式),越来越多的代码是在专门的数据中心运行,而不是在客户的机器上运行。负责这些服务正常运行的工程师们就被称为运行工程师。运行工程师面临的关键挑战之一是,要解决所有使服务无法最优化运行的问题。通常,这意味着要尽快地解决问题。如果运行团队无法解决某个问题,那么产品团队会参与进来,这将是一个耗时的过程,因为产品团队可能要反复地指导运行团队分析这个问题。通过使用正确的工具,运行团队可以解决遇到的大部分问题,而无需将这些问题提交给产品团队,因此节约了双方的时间;并且最重要的是,客户在使用服务时遇到的停机时间也将更短。
预备知识
虽然本书介绍的是如何使用非托管调试器,但重点在于介绍如何调试.NET代码,而不是非托管调试的一些基本步骤。第3章将会简要介绍一些主题,例如如何将调试附载到目标进程,设置符号路径以及设置断点等,但并没有给出详细介绍。关于非托管调试器以及非托管代码调试的进一步介绍可以参考我之前写的一本书:Mario Hewardt和Daniel Pravat,《Advanced Windows Debugging》, Boston,MA:AddisonWesley,2007。1中文版为《Windows高级调试》,由机械工业出版社于2009年5月出版。——译者注
此外,还需要深入理解C#,因为所有的示例代码都是采用C#编写的。 在学习C#时可以使用下面这本书:Mark Michaelis,《Essential C# 20》, Boston, MA: AddisonWesley, 2006。
虽然读者需要预先具备C#的知识,但并不需要深入了解CLR。本书不仅介绍了如何调试.NET程序,还对.NET平台中大量的核心代码给出了详细解释,这些信息是获得调试成功的重要基础。
本书的组织结构
本书分为三个部分,下面介绍每一部分包含的内容。
序言回到顶部↑
去年,我们在微软公司庆祝了CLR发布十周年。CLR的目的是通过提供一种安全的和稳定的环境来提高开发人员的生产效率。目前,CLR在各种环境中都得到了广泛应用,例如,在性能和可伸缩性上有着极高要求的大型服务器程序,以及日常使用的桌面程序等。 随着CLR的日益普及,基于CLR来开发软件的人们同样面临着越来越多的挑战,因为他们的产品必须能够在不同的机器配置和网络环境中运行;此外,随着硬件的高速发展,人们正在构建的软件功能越来越强,同时复杂性也越来越高。所有这些情形都意味着,当程序没有按照预期方式运行时,你就需要负责分析和修复程序中的问题,因此了解一些调试知识和工具就显得尤为重要。
为了提高工作效率,CLR为开发人员实现了许多基础的辅助机制,从而使开发人员能将主要精力放在关键逻辑上。 事实上,人们无需花太多的时间来理解完整的CLR内部细节,而只需知道一些有助于分析问题的重要概念,这一点非常重要。然而,要想知道哪些概念是重要的却并不容易。许多人都是通过反复摸索之后才掌握这些知识,而这需要长时间的积累过程并且有时候可能得不到准确的答案。
本书对运行时的阐述恰到好处,它能帮助你理解在分析问题时遵循的思考过程以及在解决问题时采用的各种技术,此外书中还给出了从调试实际应用程序中提炼出的许多实用技术。因此,如果你希望提高调试CLR应用程序的速度,那么应该仔细阅读本书。本书涵盖了托管程序调试的许多方面——特别是对于一些难以诊断的领域,例如线程同步问题,本书给出了深入而细致的讲解。 此外,本书在说明调试技术时使用了大量的示例,使得读者更容易掌握这些技术。
在本书中重点讲解的调试工具之一就是SOS调试器扩展,这个工具是由CLR小组开发和维护的。每当发布新版本的CLR时,都会对SOS进行升级,使SOS包含更多的新功能。对于分析托管进程中的问题来说,SOS是一种功能强大的工具。它提供的大部分功能都是无法从其他调试工具中获得的。例如,SOS可以找出引用托管堆中某个对象的根对象,这是托管程序开发人员经常遇到的问题之一。在熟悉了这个工具的使用后,你将可以进一步理解程序的工作流程。我还从未见过有其他的书比这本书更详细地介绍SOS。
当掌握本书介绍的知识后,在分析问题时可以付出更少的时间和精力。我希望读者在阅读这本书时获得的乐趣与我在审阅本书手稿时获得的乐趣是一样的。
Patrick Dussud
微软公司技术顾问和.NET CLR首席架构师
为了提高工作效率,CLR为开发人员实现了许多基础的辅助机制,从而使开发人员能将主要精力放在关键逻辑上。 事实上,人们无需花太多的时间来理解完整的CLR内部细节,而只需知道一些有助于分析问题的重要概念,这一点非常重要。然而,要想知道哪些概念是重要的却并不容易。许多人都是通过反复摸索之后才掌握这些知识,而这需要长时间的积累过程并且有时候可能得不到准确的答案。
本书对运行时的阐述恰到好处,它能帮助你理解在分析问题时遵循的思考过程以及在解决问题时采用的各种技术,此外书中还给出了从调试实际应用程序中提炼出的许多实用技术。因此,如果你希望提高调试CLR应用程序的速度,那么应该仔细阅读本书。本书涵盖了托管程序调试的许多方面——特别是对于一些难以诊断的领域,例如线程同步问题,本书给出了深入而细致的讲解。 此外,本书在说明调试技术时使用了大量的示例,使得读者更容易掌握这些技术。
在本书中重点讲解的调试工具之一就是SOS调试器扩展,这个工具是由CLR小组开发和维护的。每当发布新版本的CLR时,都会对SOS进行升级,使SOS包含更多的新功能。对于分析托管进程中的问题来说,SOS是一种功能强大的工具。它提供的大部分功能都是无法从其他调试工具中获得的。例如,SOS可以找出引用托管堆中某个对象的根对象,这是托管程序开发人员经常遇到的问题之一。在熟悉了这个工具的使用后,你将可以进一步理解程序的工作流程。我还从未见过有其他的书比这本书更详细地介绍SOS。
当掌握本书介绍的知识后,在分析问题时可以付出更少的时间和精力。我希望读者在阅读这本书时获得的乐趣与我在审阅本书手稿时获得的乐趣是一样的。
Patrick Dussud
微软公司技术顾问和.NET CLR首席架构师
媒体评论回到顶部↑
“虽然.NET环境为开发人员提供了一组强大的工具来编写软件,但是对开发过程中出现的各种问题进行调试仍然是一项困难的任务。本书介绍了CLR的内部工作原理,这对于分析.NET程序中出现的各种类型的错误是非常有帮助的。此外,本书还详细介绍了如何解决一些常见的复杂问题。对于所有.NET开发人员来说,本书都值得一读。”
——Lee Culver,微软公司CLR快速响应团队
“你是否碰到过.NET程序失去响应?或者周期性地出现极高的CPU使用率?或者程序崩溃?当程序出现问题时,你需要使用正确的知识和工具,并深入程序内部进行分析。本书包含了丰富的知识,可以帮助开发人员迅速找出各种软件问题。欢迎进入调试领域!”
——Roberto A Farah,微软公司高级专案领域工程师
“对于.NET开发人员来说,无论是新手还是高手,本书都具有极高的参考价值。本书包含了许多调试技巧以及CLR内部工作机制的细节,这对于设计软件架构的开发人员来说非常有用。我个人强烈推荐Mario的这本书。”
——Jeffrey Richter,Wintellect公司顾问,培训师以及作者
“这是Mario推出的又一本好书。他之前编写的《Windows高级调试》(与Daniel Pravat合著)对于非托管代码的调试来说是一本不可多得的参考书,而本书同样有着极高的质量,清晰的阐述以及深入的探讨,因此对于.NET调试来说同样很有帮助。本书详细介绍了如何观察托管堆的使用情况、理解垃圾收集器的行为以及如何跟踪同步错误等,这些内容将使你在查找和修复托管代码中的错误时更加高效。”
——Mark Russinovich,微软公司技术顾问
“本书深入介绍了一些调试工具,例如SOS,这是在其他的书中还不曾见过的。这些内容对于理解和调试托管程序来说无疑是非常有帮助的。”
——Maoni Stephens, 微软公司GC开发工程师
“对于想深入了解.NET通用语言运行时(.NET Common Language Runtime)内部工作原理的人来说,本书绝对值得一读。书中清晰地阐述了.NET系统的层次结构以及程序集的加载和组织。对于需要调试同步和内存破坏等复杂问题的开发人员来说,我建议阅读这本书。 此外,本书还详细介绍了事后调试技术。”
——Pat Styles,微软公司员工
——Lee Culver,微软公司CLR快速响应团队
“你是否碰到过.NET程序失去响应?或者周期性地出现极高的CPU使用率?或者程序崩溃?当程序出现问题时,你需要使用正确的知识和工具,并深入程序内部进行分析。本书包含了丰富的知识,可以帮助开发人员迅速找出各种软件问题。欢迎进入调试领域!”
——Roberto A Farah,微软公司高级专案领域工程师
“对于.NET开发人员来说,无论是新手还是高手,本书都具有极高的参考价值。本书包含了许多调试技巧以及CLR内部工作机制的细节,这对于设计软件架构的开发人员来说非常有用。我个人强烈推荐Mario的这本书。”
——Jeffrey Richter,Wintellect公司顾问,培训师以及作者
“这是Mario推出的又一本好书。他之前编写的《Windows高级调试》(与Daniel Pravat合著)对于非托管代码的调试来说是一本不可多得的参考书,而本书同样有着极高的质量,清晰的阐述以及深入的探讨,因此对于.NET调试来说同样很有帮助。本书详细介绍了如何观察托管堆的使用情况、理解垃圾收集器的行为以及如何跟踪同步错误等,这些内容将使你在查找和修复托管代码中的错误时更加高效。”
——Mark Russinovich,微软公司技术顾问
“本书深入介绍了一些调试工具,例如SOS,这是在其他的书中还不曾见过的。这些内容对于理解和调试托管程序来说无疑是非常有帮助的。”
——Maoni Stephens, 微软公司GC开发工程师
“对于想深入了解.NET通用语言运行时(.NET Common Language Runtime)内部工作原理的人来说,本书绝对值得一读。书中清晰地阐述了.NET系统的层次结构以及程序集的加载和组织。对于需要调试同步和内存破坏等复杂问题的开发人员来说,我建议阅读这本书。 此外,本书还详细介绍了事后调试技术。”
——Pat Styles,微软公司员工
【插图】







点击看大图







加载中...

