基于我们在 .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 中的诊断改进的更多相关文章

  1. 【译】ASP.NET Core 6 中的性能改进

    原文 | Brennan Conroy 翻译 | 郑子铭 受到 Stephen Toub 关于 .NET 性能的博文的启发,我们正在写一篇类似的文章来强调 6.0 中对 ASP.NET Core 所做 ...

  2. [译]async/await中使用阻塞式代码导致死锁 百万数据排序:优化的选择排序(堆排序)

    [译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的 ...

  3. KlayGE 4.4中渲染的改进(三):高质量无限地形

    转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2761   本系列的上一篇讲了DR中的一些改进.本篇开始将描述这个版本加入的新功能,高质量地形 ...

  4. [译]async/await中使用阻塞式代码导致死锁

    原文:[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Clea ...

  5. 【翻译】.NET 5中的性能改进

    [翻译].NET 5中的性能改进 在.NET Core之前的版本中,其实已经在博客中介绍了在该版本中发现的重大性能改进. 从.NET Core 2.0到.NET Core 2.1到.NET Core ...

  6. .Net Core中的诊断日志DiagnosticSource讲解

    前言     近期由于需要进行分布式链路跟踪系统的技术选型,所以一直在研究链路跟踪相关的框架.作为能在.Net Core中使用的APM,SkyWalking自然成为了首选.SkyAPM-dotnet是 ...

  7. 译<容器网络中OVS-DPDK的性能>

    译<容器网络中OVS-DPDK的性能> 本文来自对Performance of OVS-DPDK in Container Networks的翻译. 概要--网络功能虚拟化(Network ...

  8. .NET 4.6中的性能改进

    .NET 4.6中带来了一些与性能改进相关的CLR特性,这些特性中有一部分将会自动生效,而另外一些特性,例如SIMD与异步本地存储(Async Local Storage)则需要对编写应用的方式进行某 ...

  9. 译:DOM2中的高级事件处理(转)

    17.2. DOM2中的高级事件处理(Advanced Event Handling with DOM Level 2)        译自:JavaScript: The Definitive Gu ...

随机推荐

  1. 5.IA-32寄存器

    寄存器(Register)是CPU内部用来存放数据的一些小型存储区域,它与RAM(Random Access Memory,随机存储器.内存)略有不同.CPU访问(Access)RAM中的数据时要经过 ...

  2. (Py练习)输出乘法口诀表

    #输出9*9乘法口诀表 for i in range(1,10): for j in range(1,i+1): print("%d*%d=%2d"%(i,j,i*j),end = ...

  3. PHP 读取文件夹(比如某共享文件夹)中的图片并显示

    1.获取文件夹下图片public function albumList(){ $share_url = input('path'); $files = getImgList($share_url); ...

  4. Django(3)pycharm创建项目

    创建项目 我们创建django项目有两种方式,命令行方式和使用pycharm工具创建,本文就介绍常用的pycharm工具创建   首先点击django,输入项目的名称,选择创建好的虚拟环境,最后点击c ...

  5. Spring-Cloud之Ribbon原理剖析

    我们知道Ribbon主要的工作就是进行负载均衡,帮助我们无需再关注微服务中集群的地址信息,因此在源码剖析中我们就主要关注这部分的内容. 内置的负载均衡规则 RoundRobinRule:直接轮询的方案 ...

  6. 加载usbserial驱动后,为什么adb不可用了?

    ​某设备提供了USB串口功能,上位机(Host端)可以通过USB串口与之通信.对于Linux上位机,比如Ubuntu,自带usbserial驱动,当安装usbserial驱动后,上位机就会生成ttyU ...

  7. 最全的cURL命令使用

    cURL是什么 curl是Linux命令行工具,可以使用任何可支持的协议(如HTTP.FTP.IMAP.POP3.SCP.SFTP.SMTP.TFTP.TELNET.LDAP或FILE)在服务器之间传 ...

  8. 【BIGDATA】ElasticSearch HEAD插件的GET请求的坑

    今使用HEAD插件,发现复杂查询功能下,使用GET请求有坑. 查询语句如下: GET kk/_search { "query": { "match": { &q ...

  9. 解析CentOS 8上的Xrdp服务器安装

    解析CentOS 8上的Xrdp服务器安装   Linux系统技术交流QQ群(915246)验证问题答案:刘遄 导读 Xrdp 是 Microsoft 远程桌面协议 (RDP) 的开源实现,允许您以图 ...

  10. 源码安装Python3

    源码安装Python3 一.安装Python3需要的依赖包 [root@localhost ~]# yum install -y gcc make wget openssl openssl-devel ...