写点什么

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

  • 2013-06-13
  • 本文字数:887 字

    阅读完需:约 3 分钟

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

2013-06-13 06:271118
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 134.2 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

源码分析Netty:核心组件及启动过程分析

程序员架构进阶

架构 Netty 源码剖析 28天写作 3月日更

第九周作业

yoki

[Thinkphp6.0 零基础到前后分离实战]一

重庆柯一网络有限公司

js逐步教你实现原生电影院系统(html逻辑 css逻辑 js逻辑)

js

前置机器学习(一):数学符号及希腊字母

caiyongji

机器学习

h5逐步实现 <<canvas系统>>(html逻辑 css逻辑 js逻辑)

js

Prophecis 0.2.0 版本发布

WeDataSphere

机器学习 大数据 学习 WeDataSphere

Three.js杂记(四)—— 更好的运动:TweenMax

空城机

大前端 3D渲染 3D可视化 three. webg

高阶文件操作

Python研究所

Python 文件处理

js逐步实现原生控制系统(html逻辑 css逻辑 js逻辑)

js

go训练营毕业总结

伊灵

js逐步教你实现原生古诗匹配系统(html逻辑 css逻辑 js逻辑)

js

它终于来了!

Python研究所

Python

新思科技BlackDuck帮助Avira软件公司在保持DevOps速度的同时提升开源安全

InfoQ_434670063458

MyBatis-Plus实现自动填充createTime和updateTime

棉花糖

springboot MyBatisPlus

前置机器学习(五):30分钟掌握常用Matplotlib用法

caiyongji

机器学习

机器学习(一):5分钟理解机器学习并上手实践

caiyongji

机器学习

全球视野下的云上“夺旗赛”:京东云飞驰在产业赛道

脑极体

前置机器学习(二):30分钟掌握常用Jupyter Notebook用法

caiyongji

机器学习

前置机器学习(四):一文掌握Pandas用法

caiyongji

机器学习

如何利用VGG19实现insightface人脸识别?

程序媛观澜

机器学习 人脸识别

网页长截图如此简单

Python研究所

浏览器 实用技巧 截图

js逐步教实现音乐系统(html逻辑 css逻辑 js逻辑)

js

一文看懂特权访问管理(PAM)

龙归科技

云计算 云存储

LeetCode题解:198. 打家劫舍,动态规划(不缓存偷盗状态),JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

js逐步教实现表单系统(html逻辑 css逻辑 js逻辑)

前置机器学习(三):30分钟掌握常用NumPy用法

caiyongji

机器学习

Python-计算机视觉-OpenCV-Image

Aldeo

Python OpenCV 计算机视觉

我提升开发效率的经验

流沙

程序员 成长笔记 成长与思考

C语言性能优化:移除循环体中的重复运算

1

缓存 编程 程序员 性能优化 C语言

js逐步实现原生flex系统(html逻辑 css逻辑 js逻辑)

js

CLR Memory Diagnostics支持自动化检查任务_语言 & 开发_Anand Narayanaswamy_InfoQ精选文章