BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Anand Narayanaswamy 关注 0 他的粉丝 ,译者 臧秀涛 关注 2 他的粉丝 发布于 2013年6月14日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

微软最近发布了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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT