基于我们在 .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. hdu2100 26进制加法

    题意:       给你两个26进制数,让你算出他们两个的和. 思路:      水题不解释了,注意这样的数据 AAA AAA 输出A #include<stdio.h> #include ...

  2. hdu3786 找出直系亲属 水题

    题意:找出直系亲属Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. WPF小经验

    Binding.IsAsync当属性值填充好后,与该属性绑定的界面才会开始加载(属性绑定优于控件加载) private IList<string> _list; public IList& ...

  4. Bugku-文件包含2

    文件包含2 目录 文件包含2 题目描述 解题过程 参考 题目描述 没有描述 解题过程 文件包含题目大多都是php环境的, 所以先试试伪协议 发现php://被ban了 继续尝试,发现file://协议 ...

  5. 第六部分 数据搜索之使用HBASE的API实现条件查询

    题目 使用HADOOP的MAPReduce,实现以下功能: (1)基于大数据计算技术的条件查询:使用mapreduce框架,实现类似Hbase六个字段查询的功能 (2)时段流量统计:以hh:mm:ss ...

  6. 0902-用GAN生成动漫头像

    0902-用GAN生成动漫头像 目录 一.概述 二.代码结构 三.model.py 3.1 生成器 3.2 判别器 四.参数配置 五.数据处理 六.训练 七.随机生成图片 八.训练模型并测试 pyto ...

  7. 操作系统中的进程同步与Window中利用内核对象进行线程同步的关系

    操作系统中为了解决进程间同步问题提出了用信号量机制,信号量可分为四种类型分别是互斥型信号量,记录型信号量,AND型信号量,信号量集. 互斥型信号量 互斥型信号量是资源数量为1的特殊的记录型信号量.表示 ...

  8. 测试的V模型和W模型

    V模型 :后测试 优点: 1.每一阶段都清晰明了,便于把控开发的每一个过程. 2.既包含了单元测试又包含了系统测试 缺点: 1.测试介入的比较晚,所以开发前期的缺陷无从修改. 2.开发和测试串行. W ...

  9. JVM内存溢出后服务还能运行吗

    文章开篇问一个问题吧,一个java程序,如果其中一个线程发生了OOM,那进程中的其他线程还能运行吗? 接下来做实验,看看JVM的六种OOM之后程序还能不能访问. 在这里我用的是一个springboot ...

  10. ArrayList方法源码分析

    本文将从ArrayList类的存储结构.初始化.增删数据.扩容处理以及元素迭代等几个方面,分析该类常用方法的源码. 数据存储设计 该类用一个Object类型的数组存储容器的元素.对于容量为空的情况,提 ...