【译】.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 ...
随机推荐
- android dalvik浅析一:解释器及其执行
dalvik是android中使用的虚拟机,基于寄存器,分析基于android4.2源代码.本篇主要分析的是dalvik中的解释器部分,源码位于/dalvik/vm,主要代码在interp和mterp ...
- UVA11520填充正方形
题意: 给你一个n*n的矩阵,让你往里面添加大写字母,矩阵有的字母已经给填好了,然后要求是每个格子都不能与他相邻的格子的大写字母相同,如果有多个答案,输出从上到下,从左到右所连接的成的那个n ...
- Shiro反序列化漏洞复现
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企 ...
- Windows 怎么知道我已经连接到互联网而不是局域网? 原来当中大有文章!
Windows 怎么知道我已经连接到互联网而不是局域网? 原来当中大有文章! 转载 原文章地址:点击 2014-01-09 Windows 怎么知道我已经连接到互联网而不是局域网? 原来当中大有文章! ...
- 【JavaScript】JS从入门到深入(复习查漏向
[JavaScript]JS从入门到深入(复习查漏向 pre 精细得学过一遍JS后才发现,原来之前CTF中有些nodejs的题目以及一些游戏题的payload就变得很好理解了. 基础知识 ECMASc ...
- Codeforces Round #688 (Div. 2)
A. Cancel the Trains 题意:给定两个数组,找出这两个数组中有多少重复元素,然后输出 思路:直接找 代码: 1 #include<iostream> 2 #include ...
- 什么是redis的缓存雪崩, 穿透, 击穿?
目前的互联网系统没有几个不使用缓存的, 但是只要使用缓存的话就会面临这几个问题, 如使用redis缓存技术, 可能会遇到缓存的雪崩, 穿透, 以及击穿. 首先来看一个简单的正常缓存流程: 如用户访问J ...
- 认识 Spring Cloud Alibaba
个人理解 Spring Cloud Alibaba 就是 Spring Cloud 的微服务规范的一种实现,外加一些阿里云的商业组件 Spring Cloud 是什么 Spring Cloud 为开发 ...
- java集合类介绍
目录 集合类简介 List ArrayList LinkedList Vector Stack Set HashSet LinkedHashSet TreeSet Map HashMap Hashta ...
- [设计模式] 读懂UML图
类之间关系(由强到弱) realize(继承):三角+实线(指向类),继承类(SUV是一种汽车) generalization(实现):三角+虚线(指向接口),实现接口(汽车是一种车) composi ...