写点什么

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

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

关注

评论

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

状态机引擎在vivo营销自动化中的深度实践 | 引擎篇02

vivo互联网技术

服务器 状态机

都2022年了,HDFS为何还如此能战

华为云开发者联盟

大数据 hadoop hdfs 分布式文件系统 大数据存储

java培训关闭流方法有顺序吗

@零度

JAVA开发 包装流

敲重点!这些更新将会影响HarmonyOS原子化服务上架

HarmonyOS开发者

HarmonyOS 原子化服务

如何禁用XXE处理?

龙智—DevSecOps解决方案

漏洞扫描 代码安全 漏洞检测

净推荐值(NPS)完整行动指南

龙国富

客户体验 NPS 净推荐值 北极星指标 客户忠诚度

三高Mysql - 搭建“三高”架构之复制

懒时小窝

MySQL MySQL 高可用

不写代码,带你徒手开发一个健康打卡应用

华为云开发者联盟

无代码 AppCube 应用开发 健康打卡 可视化编排

为什么做开源需要懂异步协作?

腾源会

开源 腾源会

web前端培训开发者要掌握的CSS 技巧有哪些

@零度

CSS 前端开发

大数据培训spark SQL中count(*)和count(1)源码分析

@零度

大数据开发 spark SQL

Android C++系列:JNI常见问题

轻口味

c++ android 4月月更

netty系列之:netty中的自动解码器ReplayingDecoder

程序那些事

Java Netty 程序那些事 4月月更

逃离过度努力陷阱

FunTester

FunTester 湛卢 轻松主义

多个角度论证SeekTiger 生态核心STI的魅力

西柚子

超nei卷!连黑客勒索软件团伙都开始谈客户体验…

龙国富

黑客 客户体验 drakside 客户至上

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

Geek_36cc7c

jackson学习之六:常用类注解

程序员欣宸

4月月更

怒肝 JavaScript 数据结构 — 栈篇(三)

杨成功

数据结构 4月月更

直播预告|年营业额百亿的企业都在如何做数字化转型

云智慧AIOps社区

数字化转型 AIOPS 解决方案 智能运维

盘点:阿里云上8款免费的开发者工具

阿里云云效

阿里云 开发者 云原生 开发者工具 研发工具

无需编程,基于微软mssql数据库零代码生成CRUD增删改查RESTful API接口

crudapi

低代码 API crud crudapi 增删改查

平安普惠荆州分公司:警民齐心,共同抗疫

科技新消息

CPUvsGPU:谁才是游戏和视频编辑的核心?

Finovy Cloud

人工智能 gpu cpu

面试官:Redis的事务满足原子性吗?

码农参上

redis 事务 4月月更

模块八作业:设计消息队列存储消息数据的 MySQL 表格

王大胖

H5营销有什么优势?企业需要定制开发H5吗?

源字节1号

前端开发 后端开发 H5制作

ETL调度软件TASKCTL核心调度节点安装

敏捷调度TASKCTL

kettle 调度引擎 ETL 任务队列 调度任务

云效研发效能度量体系,如何展示和解读交付效能数据

阿里云云效

阿里云 运维 研发管理 研发效能 研发团队

三高Mysql - 搭建“三高”架构之扩展与切换

懒时小窝

MySQL MySQL 高可用

@所有高校师生,2022全国大学生物联网设计竞赛火热开启,限量礼品等你来拿!

HarmonyOS开发者

HarmonyOS 物联网设计竞赛

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