CLR Memory Diagnostics支持自动化检查任务

微软最近发布了Microsoft.Diagnostics.Runtime组件,该组件在NuGet包管理器中被称作ClrMD,支持开发者自动化检查任务及访问更多调试信息。它是一组高级API,用于以编程方式检查.NET程序的崩溃转储文件,和SOS Debugging Extensions(SOS.dll)差不多,它支持为应用程序编写自动化的崩溃分析,还支持将很多常见调试器任务的自动化。

要使用ClrMD组件,需要创建DataTarget类的一个实例,它或者表示一个崩溃转储文件,或者表示一个正在运行的.NET进程。创建完毕之后,必须调用TryGetDacLocation()方法,该方法试图在当前这台机器上找到匹配的DAC。不过,如果当前机器上没有安装匹配的CLR,可以从已安装的机器上把DAC复制过来,只需要手动把对应的mscordacwks.dll的路径提供给CreateRuntime()方法。

之后可以利用运行时对象来检查GC堆的内容,它会产生下面这样的输出:

23B1D30       36 System.Security.PermissionSet
23B1D54       20 Microsoft.Win32.SafeHandles.SafePEFileHandle
23B1D68       32 System.Security.Policy.PEFileEvidenceFactory
23B1D88       40 System.Security.Policy.Evidence

现在开发者有了输出堆统计信息所需要的数据,输出可以通过这种方式进行——使用LINQ查询将堆信息按类型分组,按总的对象大小排序。产生的输出类似下面这样:

564           11 System.Int32[]
616           2 System.Globalization.CultureData
680           18 System.String[]
728           26 System.RuntimeType
790           7 System.Char[]
5,788         165 System.String
17,252        6 System.Object[]

ClrMD也支持检索GC堆的一般信息、遍历CLR的句柄表和进程中的应用域及识别加载了哪些模块。除了收集.NET运行时所使用的各种堆相关的数据,它还支持枚举线程、这些线程的调用栈、线程上最后抛出的异常及进程的对象根。包括在ClrMD包组件中的智能感知支持开发者探索各种复杂的属性和函数。

除上述特性外,ClrThread对象包含了一个CurrentException属性,还包含了完整的栈跟踪信息及所抛出异常的消息和类型。CurrentException属性可能为空,如果为空,它会包含当前线程最后抛出的异常。

查看英文原文:CLR Memory Diagnostics Enables you to Automate Inspection Tasks

你可能感兴趣的:(CLR Memory Diagnostics支持自动化检查任务)