写点什么

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

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

关注

评论

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

新增 – 使用基于用户的许可证模式在 Amazon EC2 上运行 Visual Studio 软件

亚马逊云科技 (Amazon Web Services)

大专毕业,0基础转行C++程序员一个月后,我后悔了

程序员晚枫

程序员 转行 C++ STL

Camtasia2023最新版下载使用教程

茶色酒

Camtasia2023

一文彻底弄清楚分布式锁

做梦都在改BUG

Java 分布式锁

手把手教你使用 Python 调用 ChatGPT-3.5-API

老表

Python GPT-3 ChatGPT

为什么 MyBatis 源码中,没有我那种 if···else

程序知音

从ChatGPT到AIGC,是一次技术革命也是一次创业浪潮 | 社区征文

打工人!

人工智能 AIGC AI绘画 ChatGPT New Bing

What's new in dubbo-go-pixiu v0.6.0

apache/dubbo-go

dubbo dubbo-go dubbogo

什么是数字产品?

涛哥 数字产品和业务架构

数字化转型 数字产品

在文心一言出生地,百度悄悄燃烧AI小宇宙

脑极体

百度 文心一言

Nautilus Chain即将上线,一文盘点其六大优势

西柚子

SpringBoot+ThreadPoolTaskExecutor 批量插入百万级数据实测

做梦都在改BUG

Java Spring Boot 多线程 ThreadPoolTaskExecutor

2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等

汀丶人工智能

自然语言处理 数据标注

架构误区系列15:生造的业务概念

agnostic

服务设计

赞不绝口!仅靠阿里P9分享的 Redis 工作手册,拿到60W年薪Offer

做梦都在改BUG

Java 数据库 redis 缓存 面试

从理论到实践:MySQL性能优化和高可用架构,一次讲清

做梦都在改BUG

Java MySQL 数据库 面试 性能优化

数据库“啃”不动?CnosDB带你轻松阅读十万行源码!

CnosDB

IoT 时序数据库 开源社区 CnosDB

mysql锁及数据一致性总结

阿呆

MySQL innodb 数据一致性 事务/行级锁 脏读

堪称神级!GitHub上标星157K的Java教程,全程干货,只讲重点

做梦都在改BUG

Java

Spring Boot 整合流程引擎 Flowable,so easy

做梦都在改BUG

Java Spring Boot 流程引擎 flowable

架构误区系列14:纯代码视角的复用

agnostic

复用

写给 go 开发者的 gRPC 教程 - 错误处理

凉凉的知识库

Go 微服务 gRPC RPC RPC框架

爱不释手!阿里十几位大牛联玦整理—23年最全面试八股文合集

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

kafka是怎么做到基于磁盘却比内存还快的?

做梦都在改BUG

kafka 内存 磁盘

一座海上营业厅,一个女孩独自守望的十九年

脑极体

5G 智慧农业

Adapter基础讲解

芯动大师

mvc Adapter arrayadapter

DawnSql在数据治理中的优势

陈飞

微服务架构 分布式数据库 架构设计 数据治理 分布式缓存

字字珠玑!GitHub爆赞的网络协议手册,被华为大佬指定内部必学?

做梦都在改BUG

Java 计算机网络 网络协议

再有人问你什么是分库分表,直接把这篇文章发给他

做梦都在改BUG

Java 分库分表

FL Studio21.0.0水果中文版发布更新下载

茶色酒

FL Studio21.0.0

Nautilus Chain即将上线,一文盘点其六大优势

威廉META

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