写点什么

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

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

关注

评论

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

P8级别的顶级“并发编程”宝典,linux基础入门知识

Java 程序员 后端

RabbitMQ的高级特性和消息补偿机制,字节跳动面试真题

Java 程序员 后端

nginx路径匹配踩坑

hasWhere

缓存系统设计与实现

hasWhere

Vue进阶(幺贰肆):前端用户体验提升(一)

No Silver Bullet

用户体验 9月日更

☕【Java 技术指南】「并发编程专题」Fork/Join 框架基本使用和原理探究(原理篇)

码界西柚

forkjoin forkjoinpool 9月日更 任务盗取

写给互联网工程师的5G书 | 7. 云化接入网

俞凡

架构 5G 网络 通信

PDF超过6000页,2021最新Java面试题及答案

Java 程序员 后端

过滤器、拦截器、监听器

hasWhere

模块四作业

Geek_fc100d

「架构实战营」

消息队列存储消息数据的MySQL表格设计

gawaine

架构师训练

超全面Redis分布式高可用方案:哨兵机制

架构精进之路

redis 后端 引航计划 内容合集

端口连接出现大量FIN_WAIT1/CLOSE_WAIT

hasWhere

Java面试必刷的200道真题,深挖底层原理、啃源码,最终上岸

Java 程序员 后端

详细讲解服务幂等性设计

架构精进之路

后端 幂等性 引航计划 内容合集

Linux创建/删除新用户

在即

9月日更

写给互联网工程师的5G书 | 6. 参考实现

俞凡

架构 5G 网络 通信

《转》搭建websocket消息推送服务

hasWhere

写给互联网工程师的5G书 | 5. 高级功能

俞凡

架构 5G 网络 通信

模块八作业

SAKIN

古董系统的并发安全改造

hasWhere

【Flutter 专题】41 图解神秘的 SystemChrome

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

Vue进阶(幺贰叁):v-for 实现一行展示 n 个元素

No Silver Bullet

Vue 9月日更

P8级别的顶级“并发编程”宝典,面试完腾讯我才发现这些知识点竟然没掌握全

Java 程序员 后端

架构实战营模块八作业

宁静志远

架构实战营

Opus从入门到精通(八)Opus编码基础之压缩编码

轻口味

android 音视频 9月日更

千万级学生管理系统的考试试卷存储方案

michael

#架构实战营

Nginx如何支持HTTPS,大厂Java高级多套面试专题整理集合

Java 程序员 后端

CoroutineWorker

Changing Lin

9月日更

写给互联网工程师的5G书 | 4. RAN详解

俞凡

架构 5G 网络 通信

架构设计的一些思考

hasWhere

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