本文适用于:✔️ .NET Core 3.0 及更高版本
安装
可采用两种方法来下载和安装 dotnet-stack
:
- dotnet 全局工具:
若要安装最新版
dotnet-stack
NuGet 包,请使用 dotnet tool install 命令: .NET CLI复制 dotnet tool install --global dotnet-stack - 直接下载: 下载与平台相匹配的工具可执行文件: 表 1(OS)平台Windowsx86 | x64 | arm | arm-x64macOSx64Linuxx64 | arm | arm64 | musl-x64 | musl-arm64
摘要
控制台复制
代码语言:javascript复制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 报告
打印目标进程中每个线程的堆栈跟踪。
摘要
控制台复制
代码语言:javascript复制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 进程。
摘要
控制台复制
代码语言:javascript复制dotnet-stack ps [-h|--help]
使用 dotnet-stack 报告托管堆栈
使用 dotnet-stack
报告托管堆栈:
- 获取要从中报告堆栈的 .NET Core 应用程序的进程标识符 (PID)。
- 例如,在 Windows 上,可以使用任务管理器或
tasklist
命令。 - 在 Linux 上,使用
ps
命令。 - dotnet-stack ps
- 例如,在 Windows 上,可以使用任务管理器或
- 运行下面的命令:
控制台复制
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
- 输出中的注释以