10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

为什么说敏捷开发是应用程序的未来?

优秀

敏捷开发

金融科技成为服贸会热议话题:数字化转型中如何保障金融安全

CECBC

架构实战营模块七作业-游戏商城异地多活

王晓宇

架构实战营

连续两年的云上服贸会,一部会展行业的数智化启示录

脑极体

MVP验证方向,差异化策略超越竞争

石云升

MVP 9月日更

高并发系统SoEasy!Alibaba全新出品亿级并发设计速成笔记真香

Java 编程 架构 面试 架构师

架构实战营 模块七 作业

一雄

作业 架构实战营 模块七

从分子层面雕刻肌肉,新数学模型预测锻炼肌肉最优方式

脑极体

模块七作业

秀聪

架构实战营

学习笔记:TCP传输控制协议(一)

姬翔

9月日更

从电视购物到电商直播,什么造就了「带货的参差」

融云 RongCloud

冒死上传!阿里内部最新版“SpringCloud Alibaba手册”细节拉满

Java 编程 架构 面试 架构师

Mybatis的工作流程及原理

咿呀呀

mybatis 9月日更

压箱底宝藏!程序员必不可少的8款办公利器

Jackpop

架构实战营模块7课后作业

燕燕 yen yen

架构实战营

自动交Y机器人开发|市值机器人源码搭建

量化系统19942438797

卖NFT表情包赚上百万,区块链技术终于找到了真正价值?

CECBC

Java从建表语句中提取索引信息, 索引名称,复合索引包含字段,索引类别(普通索引/主键索引/唯一索引/全文索引/空间索引)解决方案

张音乐

数据库 索引 9月日更

linux之ssh-keygen命令

入门小站

Linux

从 ClickHouse 到自研 ByteHouse:实时数据分析场景下的优化实践

火山引擎开发者社区

Clickhouse

小游戏 合成

游戏开发_软件开发

用友YonSuite在基于六力模型的SaaS产品中位居业界前列

海比研究院

两种定时任务调度器对比

xyu

定时任务 Go 语言

在线JSON转BigQuery工具

入门小站

百度清风算法再次升级:必须严打低质下载站

石头IT视角

2021年最受欢迎的10款开源DevOps工具

Jackpop

【LeetCode】数据流中的中位数Java题解

Albert

算法 LeetCode 9月日更

关于比特币和区块链的3件重要事项

CECBC

Promise.race() 原理解析及使用指南

devpoint

异步 Promise 9月日更

太棒了!终于有大佬把“消息队列”核心知识点全都总结出来了

Java 编程 架构 面试 架构师

渗透测试入门指南之小白该如何学习渗透?

网络安全学海

黑客 网络安全 信息安全 WEB安全 渗透测试·

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