写点什么

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

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

关注

评论

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

WorkPlus超级APP助力企业节省IT人力成本,实现快速移动化

BeeWorks

个人技术成长方面的心得体会:边缘计算之旅

农夫三拳

深入学习Python与Vscode环境的安装与配置

申公豹

Python

Python从基础到进阶字符串验证

申公豹

Python

cmake | AI工程化部署

AIWeker

c AI AI工程化部署

项目分享:AIGC技术在智能教学生成中的应用

YoLo

AI

HarmonyOS的功能及场景应用

芯动大师

Python图像处理:批量添加水印的优雅实现与进阶技巧

申公豹

Python

多表格文件单元格平均值计算实例解析

申公豹

Python

嵌入式系统入门实战:探索基本概念和应用领域

申公豹

嵌入式

鸿蒙 API 9工程转换为API 10工程

坚果

HarmonyOS OpenHarmony

掌握进阶:高级功能、图表定制与地理数据绘制

申公豹

Python

深入理解嵌入式系统中的GPIO控制与应用

申公豹

嵌入式

实时任务调度与通信协议在嵌入式开发中的应用

申公豹

嵌入式

2023 年度总结—总结我今年的AI之路-多项目实战经验谈AI发展前景

申公豹

#技术人的2023总结

在Python中实现条形图动态追赶动画效果

申公豹

Python

简洁灵活:Python中基于字段的不使用元类的ORM实现

申公豹

Python

构建高效、安全的在线考试系统:基于Spring Boot和Vue的前后端分离之道

申公豹

深入探索嵌入式系统开发:从LED控制到物联网集成

申公豹

嵌入式

Seaborn 数据可视化全攻略:从基础到高级实战

申公豹

Python

利用开源框架BMF实现高效视频处理

Geek-yan

基于STM32的物联网节点设计与实现-传感器数据采集与无线通信

申公豹

嵌入式

嵌入式系统中的低功耗定时器应用与优化实战

申公豹

嵌入式

WorkPlus一站式协同解决方案,助力企业降本增效

BeeWorks

用纯 Python 打造的轻量级 Excel 到 Markdown 转换工具

申公豹

Python

KubeWharf适合场景 开源赛道 3:深入云原生

Echo_Wish

云原生 年度总结 2023 KubeWharf 技术总结

Python文件操作指南:读写、异常处理与上下文管理器详解

申公豹

Python

手把手教你Python圣诞主题绘图

申公豹

Python

基于Vue.js和Spring Boot的口罩自助售卖系统:设计、实现与技术深度解析

申公豹

开发

CnosDB:深入了解时序数据处理函数

CnosDB

开源 时序数据库 CnosDB

CnosDB如何确保多步操作的最终一致性?

CnosDB

开源 时序数据库 CnosDB

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