NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

[Pulsar] Consumer 确认消息原理

Zike Yang

Apache Pulsar 12月日更

拆分电商系统为微服务

Steven

架构实战营

DataPipeline携手云南开放大学,以实时数据融合助力高校精细化管理

DataPipeline数见科技

数据库 中间件 Big Data 数据融合 高校

[架构实战营] 模块一作业:微信业务架构与学生管理系统

Geek_0ed632

「架构实战营」

把管理做简单

Ian哥

项目管理 十六个字 阿里管理箴言

团队基建系列 - 组织知识传承 4 破局

搬砖的周狮傅

团队成长

万字长文--基于业务视角的上云实践

hackstoic

DevOps 运维 云原生 架构设计 签约计划第二季

面试官:你是怎样理解Fiber的

全栈潇晨

React react fiber

Go语言学习查缺补漏ing Day7

恒生LIGHT云社区

golang Go 语言 编程语言‘

Keep Going

Nydia

【Promise 源码学习】第十五篇 - 了解 generator 生成器

Brave

源码 Promise 12月日更

钉钉宜搭亮相“第二届ISIG中国产业智能大会”:云钉低代码,构建企业酷应用

一只大光圈

钉钉 低代码 数字化 钉钉宜搭 ISIG

Redis(一):单线程为何还能这么快?

IT巅峰技术

redis 分布式 架构师 分布式缓存 Java Redis

Flutter 自定义 ACEFoldTextView 折叠文本

阿策小和尚

28天写作 0 基础学习 Flutter 内容合集 签约计划第二季 12月日更

架构实战营模块一作业

黄秀明

「架构实战营」

给弟弟的信第8封|计算机专业应该掌握的知识

大菠萝

28天写作

Flutter 2.8 的新特性【Flutter 专题 20】

坚果

flutter 28天写作 12月日更

react源码解析3.react源码架构

buchila11

React react fiber

架构实战营 第一周作业

姬凌伟

react源码解析6.legacy模式和concurrent模式

buchila11

React

【LeetCode】最短补全词Java题解

Albert

算法 LeetCode 12月日更

信息架构升级|宜搭邀你体验「沉浸式」应用搭建

一只大光圈

钉钉 低代码 数字化 钉钉宜搭

模块一学习总结

糖糖学编程

架构实战营

架构实战营-第4期-模块一作业

Evan

「架构实战营」

【架构实战营】-模块一作业

糖糖学编程

架构实战营

Maven进阶(三):配置多仓库

No Silver Bullet

maven 12月日更

从0到1教你如何使用 p5.js 绘制简单的动画

海拥(haiyong.site)

大前端 动画 28天写作 签约计划第二季 12月日更

架构训练营 -4- 模块一作业

glenny

「架构实战营」

活动预告|Feature Store Meetup

第四范式开发者社区

OpenMLDB Feature Store

聊聊程序员35岁危机

全栈潇晨

程序员 大前端 35岁危机

SAP Spartacus Session affinity

Jerry Wang

后端 28天写作 12月日更 Spartacus 会话

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