【译】.NET 5 中的诊断改进
基于我们在 .NET Core 3.0 中引入的诊断改进,我们一直在努力进一步改进这个领域。我很高兴介绍下一波诊断改进。
诊断工具不再需要 .NET SDK
直到最近,.NET 诊断工具套件还只能作为 .NET SDK 全局工具使用。虽然这为获取和更新工具提供了一种方便的方式,但这意味着在没有完整 SDK 的环境中很难获得它们。我们现在提供了一个单文件分发机制,它只需要在目标机器上提供一个运行时(3.1+)。
工具的最新版本总是可以通过以下模式的链接获得:
https://aka.ms/<tool-name>/<platform-runtime-identifier>
例如,如果你在 x64 Ubuntu 上运行 .NET Core,你可以从 https://aka.ms/dotnet-trace/linux-x64 获得 dotnet-trace。
支持的平台列表及其下载链接可以在每种工具的文档中找到,例如 dotnet-counters 文档。所有可用工具和支持的平台运行时标识符的列表可以在 diagnostics repo 中找到。
在 Windows 上分析 Linux 内存 dump
调试托管代码需要托管对象和构造的专门知识。数据访问组件(DAC)是运行时执行引擎的一个子集,它具有这些构造的知识,可以在不使用运行时的情况下访问这些托管对象。在 .NET Core 3.1.8+ 和 .NET 5+ 中,我们已经开始在 Windows 上编译 Linux DAC。在 Linux 上收集的 .NET Core 进程 dump 现在可以在 Windows 上使用 WinDBG、dotnet dump analyze 和 Visual Studio 2019 16.8 进行分析。
有关如何收集 .NET 内存 dump 以及如何分析它们的详细信息,请访问 VisualStudio 博客。
启动跟踪
.NET 诊断工具套件的工作方式是连接到运行时间创建的诊断端口,然后请求运行时使用该通道上的诊断 IPC 协议将信息导出。在 .NET Core 3.1 中,无法执行启动跟踪(通过 EventPipe;ETW 仍然是可能的),因为在工具连接到运行时之前发出的事件将会丢失。在 .NET 5 中,现在可以配置运行时在启动期间挂起自己,直到工具连接(或让运行时连接到工具)。
dotnet -counters 和 dotnet-trace 的5.0版本现在可以启动 dotnet 进程并从进程开始收集诊断信息。例如,下面的命令将启动 mydotnetapp.exe 并开始监听计数器。
dotnet counters monitor -- mydotnetapp.exe
关于启动跟踪的更多信息可以在 dotnet-counters 和 dotnet-trace 的文档页面上找到。
程序集加载诊断
在 .NET 5 中,运行时现在通过 EventPipe 为程序集绑定发出事件。此信息可以帮助您诊断运行时不能在运行时定位程序集的原因。这是对 .NET 框架中 Fusion Log Viewer(fuslogvw.exe)的替换。
可以使用以下命令收集程序集加载诊断:
dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:4:4 --process-id [process ID]
可以使用 PerfView 分析生成的 .nettrace 文件。
结束
感谢您试用 .NET 5 中更新的诊断工具。请继续给我们反馈,无论是在评论中还是在 GitHub 上。我们正在认真倾听,并将根据您的反馈继续做出改变。我们将在后续的博客文章中介绍 .NET 5 中关于诊断工具的更多改进。
原文链接
https://devblogs.microsoft.com/dotnet/diagnostics-improvements-in-net-5/

【译】.NET 5 中的诊断改进的更多相关文章
- 【译】ASP.NET Core 6 中的性能改进
原文 | Brennan Conroy 翻译 | 郑子铭 受到 Stephen Toub 关于 .NET 性能的博文的启发,我们正在写一篇类似的文章来强调 6.0 中对 ASP.NET Core 所做 ...
- [译]async/await中使用阻塞式代码导致死锁 百万数据排序:优化的选择排序(堆排序)
[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的 ...
- KlayGE 4.4中渲染的改进(三):高质量无限地形
转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2761 本系列的上一篇讲了DR中的一些改进.本篇开始将描述这个版本加入的新功能,高质量地形 ...
- [译]async/await中使用阻塞式代码导致死锁
原文:[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Clea ...
- 【翻译】.NET 5中的性能改进
[翻译].NET 5中的性能改进 在.NET Core之前的版本中,其实已经在博客中介绍了在该版本中发现的重大性能改进. 从.NET Core 2.0到.NET Core 2.1到.NET Core ...
- .Net Core中的诊断日志DiagnosticSource讲解
前言 近期由于需要进行分布式链路跟踪系统的技术选型,所以一直在研究链路跟踪相关的框架.作为能在.Net Core中使用的APM,SkyWalking自然成为了首选.SkyAPM-dotnet是 ...
- 译<容器网络中OVS-DPDK的性能>
译<容器网络中OVS-DPDK的性能> 本文来自对Performance of OVS-DPDK in Container Networks的翻译. 概要--网络功能虚拟化(Network ...
- .NET 4.6中的性能改进
.NET 4.6中带来了一些与性能改进相关的CLR特性,这些特性中有一部分将会自动生效,而另外一些特性,例如SIMD与异步本地存储(Async Local Storage)则需要对编写应用的方式进行某 ...
- 译:DOM2中的高级事件处理(转)
17.2. DOM2中的高级事件处理(Advanced Event Handling with DOM Level 2) 译自:JavaScript: The Definitive Gu ...
随机推荐
- TCP的三次握手和四次挥手和UDP协议
目录 TCP 三次握手 四次挥手 为什么建立连接是三次而断开连接是四次呢? TCP和UDP的区别 TCP数据包的封装 UDP数据包封装 SCTP SYN Flood泛洪攻击 TCP TCP(Trans ...
- Windows Server中企业证书服务的安装
目录 企业证书服务的安装 证书服务的应用 企业证书服务的安装 企业证书服务是基于域的,所以需要该服务器是域控服务器. 添加角色,勾选 Active Directory 证书服务 然后后面的一直下一步, ...
- Windows Pe 第三章 PE头文件(下)
3.5 数据结构字段详解 3.5.1 PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550 ...
- Windows PE 第一章开发环境和基本工具使用
第一章 Windows PE 基本工具 1.1开发语言MASM32 1.1.1设置开发环境 这个不细说了,我在整理Intel汇编的时候详细的说了环境搭建以及细节.地址是:http://blog.csd ...
- 安装google cloud sdk报错解决方法总结(超全)
前提:python环境最好是2.7,如果是python3可能会出很多小毛病:能用64位系统就尽量用64位,32位系统安装也很多毛病 一.Error1:Unzip Failed: Error openi ...
- 【pytest系列】- pytest测试框架介绍与运行
如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html 前言 目前有两种纯测试的测 ...
- Securecrt 在win7下 字体太少问题
用WIN7,觉得securecrt里面可用的字体太少了.很多都没有,比如lucida console,经过一番查找,终于找到解决问题的方法了. 原因就是win7里面的很多字体都被设置为隐藏了,所以se ...
- 使用constexpr时遇到的小坑
最近在使用constexpr的时候无意中踩了个小坑. 下面给个小示例: #include <iostream> constexpr int n = 10; constexpr char * ...
- WM_PAINT 与 WM_ERASEBKGND消息的深入分析
当WM_PAINT消息不是由函数InvalidateRect产生的时(即通过最大话,最小化,移动,下拉菜单等),系统会先产生连续产生若干个WM_ERASEBKGND消息,紧接着在产生WM_PAINT消 ...
- MySQL备份脚本,应该这么写
前言: 数据库备份的重要性不言而喻,特别是在生产环境,任何数据的丢失都可能产生严重的后果.所以,无论什么环境,我们都应该有相应的备份策略来定时备份数据库.在 MySQL 中,比较常用的逻辑备份工具是 ...