.NET Core 中提供哪些诊断工具?

软件并非始终按预计方式运行,但 .NET Core 具有可帮助用户快速有效地诊断这些问题的工具和 API。

本文可帮助用户查找各种所需的工具。

托管调试器

借助托管调试器,用户可以与程序进行交互。 暂停、增量执行、检查和恢复操作可让用户深入了解代码的行为。 调试器是诊断易于重现的功能问题的首选。

日志记录和跟踪

日志记录和跟踪是相关技术。 它们指的是用于创建日志文件的检测代码。 这些文件记录了程序操作的详细信息。 这些细节可用于诊断最复杂的问题。 当与时间戳结合使用时,这些技术在性能调查中也非常有用。

指标

指标是在一段时间内记录的数值度量,用于监视应用程序性能和运行状况。 指标通常用于在检测到潜在问题时生成警报。 在正常使用中,指标的性能开销非常低,并且配置为“始终启用”遥测。 .NET 运行时和库发布了许多内置的指标,你可以使用指标 API 创建新指标。

单元测试

单元测试是持续集成和部署高质量软件的关键组件。 单元测试的目的在于,在用户操作导致系统出现问题时提前向其发出警告。

转储

转储是一个文件,其中包含创建时进程的快照。 它们可用于检查应用程序的状态,以便进行调试。

符号

符号是源代码和编译器生成的二进制代码之间的映射。 这些通常被 .NET 调试器用来解析源行号、局部变量名称以及其他类型的诊断信息。

收集容器中的诊断

也可使用非容器化 Linux 环境中使用的相同诊断工具收集容器中的诊断。 只需进行几次使用更改就可使这些工具在 Docker 容器中运行。

.NET Core 诊断全局工具

dotnet-counters

dotnet-counters 是一个性能监视工具,用于初级运行状况监视和性能调查。 它通过 EventCounter API 观察已发布的性能计数器值。 例如,可以快速监视 CPU 使用情况或 .NET Core 应用程序中的异常率等指标。

dotnet-dump

通过 dotnet-dump 工具,可在不使用本机调试器的情况下收集和分析 Windows 和 Linux 核心转储。

dotnet-gcdump

dotnet-gcdump 工具可用于为活动 .NET 进程收集 GC(垃圾回收器)转储。

dotnet-trace

分析数据通过 .NET Core 中的 EventPipe 公开。 通过 dotnet-trace 工具,可以使用来自应用的有意思的分析数据,这些数据可帮助你分析应用运行缓慢的根本原因。

dotnet-stack

使用 dotnet 工具可以快速打印正在运行的 .net 进程中的所有线程的托管堆栈。

dotnet-symbol

dotnet-symbol 用于下载打开核心转储或小型转储所需的文件(符号、DAC/DBI、主机文件等)。 如果需要使用符号和模块来调试在其他计算机上捕获的转储文件,请使用此工具。

dotnet-sos

dotnet-sos 在 Linux 和 macOS(如果使用的是 Windbg/cdb,则在 Windows 上)安装 SOS调试扩展

PerfCollect

PerfCollect 是一个 bash 脚本,可用于收集包含 perfLTTng 的跟踪,以便更深入地分析在 Linux 分发版上运行的 .NET 应用的性能。

.NET Core 诊断教程

编写自己的诊断工具

使用诊断客户端库可以编写最适合诊断场景的自定义诊断工具。 在 Microsoft.Diagnostics.NETCore.Client API 参考中查找信息。

调试内存泄露

教程:调试内存泄漏演示了如何查找内存泄漏。 dotnet-counters 工具用于确认泄露,dotnet-dump 工具用于诊断泄露。

调试高 CPU 使用率

教程:调试高 CPU 使用率逐步介绍了如何调查高 CPU 使用率。 它使用 dotnet-counters 工具来确认高 CPU 使用率。 然后,它逐步介绍了如何使用性能分析实用工具 (dotnet-trace) 跟踪或 Linux perf 来收集和查看 CPU 使用率配置文件。

调试死锁

教程:调试死锁介绍了如何使用 dotnet-dump 工具来调查线程和锁。

调试 StackOverflow

教程:调试 StackOverflow 演示了如何在 Linux 上调试 StackOverflowException

调试 Linux 转储

调试 Linux 转储说明了如何收集和分析 Linux 上的转储。

使用 EventCounters 衡量性能

教程:使用 .NET 中的 EventCounters 度量性能演示了如何使用 EventCounter API 来衡量 .NET 应用的性能。