四、基础知识
在这一段内容中,有的小节可能会包含两个部分,分别是 A 和 B,也有可能只包含 A,如果只包含 A 部分,A 字母会省略。A 是【基础知识】,讲解必要的知识点,B 是【眼见为实】,通过调试证明讲解的知识点。
4.1、SOS 和 Visual Studio 2022 集成
.Net Framework 版本
SOS 调试扩展(SOS.dll)通过提供有关内部公共语言运行时(CLR)环境的信息,帮助你在 Visual Studio 和 Windows 调试器(WinDbg.exe)中调试托管程序。 此工具需要你启用项目的非托管调试。 SOS.dll 自动随 .NET Framework 一起安装。 若要在 Visual Studio 中使用 SOS.dll,请安装 Windows 驱动程序工具包 (WDK)。
若要在 Visual Studio 中使用 SOS 调试扩展,请安装
Windows 驱动程序工具包 (WDK)。
如果想查看更详细的内容,可以点击连接查看:
SOS.dll(SOS 调试扩展)
.Net 版本
如果想了解跨平台版本的调试内容,可以点击这里了解更多详情:
SOS 调试扩展
将 Visual Studio 的强大功能和易用性与SOS对CLR 的解析结合起来,就可以应对各种复杂的调试情况。
4.2、NET 框架源代码级调试
通常,任何 .NET 程序都会用到 .NET 框架中定义的一组不同类型。这些类型既包括简单的数据类型,也包括复杂的 Web 服务绑定类型,它们能有效地屏蔽这些技术的底层复杂性。与任何抽象一样,如果要调试某个有问题的应用程序,那么调试过程也会因此而变得复杂。在分析程序为什么会失败时,如果能够直接对尝试对源代码进行分析,而不是使用逆向工程(即反汇编),那么调试过程会变得更为容易。Microsoft 意识到了这种需求,因此公开了.NET 框架的部分源代码。这些公开的源代码可以集成到 Visual Studio 中,从而使开发人员可以对已发布的 .NET 框架源代码进行源代码级调试。接下来,我们将看到如何配置 Visual Studio 来实现无缝的.NET 框架源代码级调试。
Net Framework 和 跨平台 Net 框架源码调试还是有一些区别的,我分别给出微软具体的学习页面,大家自行研学吧。
如果是在 .Net Framework 平台下,我们可以点击此链接进行配置,进行框架源码调试:
调试 .NET Framework 源代码
如果是在跨平台版本下,我们点击以下链接,自行框架源码调试的学习:
使用 Visual Studio 调试 .NET 和 ASP.NET Core 源代码。
教程很详细,方法也很简单,就不多说了。
4.3、 CLR Profiler 分析器
CLR 分析器是一种功能非常强大的工具,它能够分析托管堆的行为,并且以各种不同的格式显示出结果。
官网下载地址:
CLRProfiler
如果大家想了解更多、更详细的内容,可以点击连接:
CLR 探查器和 Windows 应用商店应用
SOS 与 CLR 分析器
要生成CLR分析器能够理解的文件,可以使用 SOSTraverseHeap 命令。然后,可以将文件加载到 CLR 分析器中从而发挥 CLR 分析器的强大功能。
尽管 CLR 分析器是一个很成熟的工具,可以提供关于托管堆的大量信息,但还是存在一些局限:
I、降低程序的执行速度。当在CLR分析器下运行程序时,执行速度会降低10倍到100倍。
II、日志文件的大小。CLR分析器收集了大量的数据保存在本地驱动器上。
III、程序必须由 CLR 分析器启动,而不能将CLR分析器附载到一个已经运行的程序。