本文适用于:✔️ .NET Core 3.0 及更高版本
安装
可采用两种方法来下载和安装 dotnet-stack:
dotnet 全局工具:
若要安装最新版 dotnet-stack NuGet 包,请使用 dotnet tool install 命令:
dotnet tool install --global dotnet-stack
直接下载:
下载与平台相匹配的工具可执行文件:
(OS)
平台
Windows
x86 | x64 | arm | arm-x64
macOS
x64
Linux
x64 | arm | arm64 | musl-x64 | musl-arm64
摘要
dotnet-stack [-h, --help] [--version] <command>
描述
dotnet-stack 工具:
是一个跨平台的 .NET Core 工具。
为目标 .NET 进程中的所有线程捕获和打印托管堆栈。
利用 .NET Core 运行时提供的 EventPipe 跟踪。
选项
-h|--help
显示命令行帮助。
--version
显示 dotnet-stack 实用工具的版本。
命令
命令
说明
dotnet-stack 报告
打印目标进程中每个线程的堆栈跟踪。
dotnet-stack ps
列出可从中收集跟踪的 dotnet 进程。
dotnet-stack 报告
打印目标进程中每个线程的堆栈跟踪。
摘要
dotnet-stack report -p|--process-id <pid>
-n|--name <process-name>
[-h|--help]
选项
-n, --name <name>
从中收集跟踪的进程的名称。
-p|--process-id <PID>
从中收集跟踪的进程 ID。
dotnet-stack ps
列出可从中收集跟踪的 dotnet 进程。
摘要
dotnet-stack ps [-h|--help]
使用 dotnet-stack 报告托管堆栈
使用 dotnet-stack 报告托管堆栈:
获取要从中报告堆栈的 .NET Core 应用程序的进程标识符 (PID)。
例如,在 Windows 上,可以使用任务管理器或 tasklist 命令。
在 Linux 上,使用 ps 命令。
dotnet-stack ps
运行下面的命令:
dotnet-stack report --process-id <PID>
前面的命令生成类似于以下内容的输出:
Thread (0x48839B):
[Native Frames]
System.Console!System.IO.StdInReader.ReadKey(bool&)
System.Console!System.IO.SyncTextReader.ReadKey(bool&)
System.Console!System.ConsolePal.ReadKey(bool)
System.Console!System.Console.ReadKey()
StackTracee!Tracee.Program.Main(class System.String[])
dotnet-stack 的输出遵循以下格式:
输出中的注释以 # 为前缀。
每个线程都有一个标头,其中包含本机线程 ID:Thread (<thread-id>):。
堆栈帧遵循格式 Module!Method。
转换为非托管代码在输出中表示为 [Native Frames]。
# comment
Thread (0x1234):
module!Method
module!Method
Thread (0x5678):
[Native Frames]
Module!Method
Module!Method
后续步骤
使用 dotnet-trace 收集 .NET 应用程序的 CPU 示例
使用 dotnet-dump 收集 .NET 应用程序的转储