原文:
https://docs.microsoft.com/zh-cn/dotnet/core/diagnostics/
软件并非始终按预计方式运行,但 .NET Core 具有可帮助用户快速有效地诊断这些问题的工具和 API。
本文可帮助用户查找各种所需的工具。
托管调试器
借助托管调试器,用户可以与程序进行交互。 暂停、增量执行、检查和恢复操作可让用户深入了解代码的行为。 调试器是诊断易于重现的功能问题的首选。
日志记录和跟踪
日志记录和跟踪是相关技术。 它们指的是用于创建日志文件的检测代码。 这些文件记录了程序操作的详细信息。 这些细节可用于诊断最复杂的问题。 当与时间戳结合使用时,这些技术在性能调查中也非常有用。
指标
EventCounters 使你可编写指标来识别和监视性能问题。 与跟踪相比,指标产生的性能开销较低,这使指标更适合 always-on 性能监视。 .NET 运行时和库发布了多个已知 EventCounters,你也可以对其进行监视。
单元测试
单元测试是持续集成和部署高质量软件的关键组件。 单元测试的目的在于,在用户操作导致系统出现问题时提前向其发出警告。
转储
转储是一个文件,其中包含创建时进程的快照。 它们可用于检查应用程序的状态,以便进行调试。
符号
符号是调试和其他诊断工具的基本需求。 符号文件的内容在语言、编译器和平台之间各有不同。 以非常概要的角度来看,符号是源代码和编译器生成的二进制文件之间的映射。 这些映射用于在 Visual Studio 和 Visual Studio Code 等诊断工具中提供行号信息和局部变量名称之类的内容。 以下链接包含适用于 Windows 的符号的详细说明,但许多概念也适用于其他平台。 .NET 可移植符号具有类似于 Windows PDB 的“PDB”文件扩展名,但并不与 Windows PDB 格式兼容。
收集容器中的诊断
也可使用非容器化 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-symbol
dotnet-symbol 用于下载打开【核心转储或小型转储所需的文件(符号、DAC/DBI、主机文件等)】。 如果需要【使用符号和模块来调试】在其他计算机上捕获的转储文件,请使用此工具。
dotnet-sos
dotnet-sos 在 Linux 和 macOS(如果使用的是 Windbg/cdb,则在 Windows 上)安装 SOS调试扩展。
PerfCollect
PerfCollect 是一个 bash 脚本,可用于【收集包含 perf
和 LTTng
的跟踪】,以便更深入地分析【在 Linux 分发版上运行的 .NET 应用的性能】。
.NET Core 诊断教程
调试内存泄露
教程:调试内存泄漏演示了如何查找内存泄漏。 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 应用的性能】。