写点什么

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:271417
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

盘点2020|多线程的遥感大数据行业产品经历

老壳有点爽

大数据 盘点2020 InSAR

程序员因重复记录日志撑爆ELK被辞退!

Java架构师迁哥

几款Java开发者必备常用的工具,准点下班不在话下

华为云开发者联盟

Java 工具 开发

forsage以太坊矩阵系统软件开发|forsage以太坊矩阵APP开发

系统开发

DAPP软件系统开发

系统开发

女朋友突然问我DNS是个啥....

乱敲代码

计算机网络 DNS DNS服务器

等保数据备份和恢复关键点,这些你该知道!

华为云开发者联盟

数据 容灾 恢复

架构师训练营第 13 周学习总结

netspecial

极客大学架构师训练营

架构师训练营第 1 期第 13 周作业

业哥

《O2O实战:他们是如何利用互联网的》.pdf

田维常

互联网

扩招1W人,字节跳动内部公开12月份Java岗71道面试题

比伯

Java 编程 架构 面试 程序人生

架构师 3 期 3 班 -week4- 作业

zbest

作业 week4

90分钟10个手写案例,从源码底层给你讲解7种线程池创建方式

996小迁

Java 源码 架构 资料 笔记

LeetCode题解:127. 单词接龙,双向BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

智能微卡口监控系统搭建,智慧平安小区建设解决方案

t13823115967

智慧城市

5张图搞懂Java引用拷贝、深拷贝、浅拷贝

bigsai

Java 浅拷贝和深拷贝

架构师训练营 1 期 -- 第十三周总结

曾彪彪

极客大学架构师训练营

建议收藏,mybatis插件原理详解

田维常

mybatis

干货丨如何使用Redash连接DolphinDB数据源

DolphinDB

数据处理 时序数据库 DolphinDB 数据库开发 redash

从阿里离职后人虚了,头也秃了,就剩这份Java性能优化的PDF了

Java架构追梦

Java 架构 面试 性能优化 并发

985研究生熬夜23天吃透845页架构宝典 终收割腾讯Java岗offer!再也不用怀疑人生了

比伯

Java 编程 架构 面试 程序人生

OpenKruise v0.7.0 版本发布:新增周期任务分发控制器

阿里巴巴云原生

阿里云 容器 开发者 运维 云原生

警务通APP系统开发,移动警务平台搭建解决方案

t13823115967

智慧城市

微软最强 Python 自动化工具开源了!不用写一行代码!

星安果

Python 开源 自动化 工具 高效率

边缘计算和5G:我们从何而来?

VoltDB

云计算 大数据 5G 物联网 边缘计算

阿里华为等大厂如何处理数值精度/舍入/溢出问题

Java架构师迁哥

盘点2020 | 一个三线程序员的2020年,不卑不亢

沉默王二

程序员 盘点2020 沉默王二

盘点2020 | 微服务架构下该如何技术选型呢?

xcbeyond

微服务 技术选型 盘点2020 选型原则

PostgreSQL高可用:多主复制解决方案

PostgreSQLChina

数据库 postgresql 开源

Tufin联合Cisco,将网络安全自动化进行到底

Geek_448e23

网络安全 自动化管理 云安全

从面试角度分析LinkedList源码

Java旅途

Java List 集合 linkedlist

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