检查托管堆栈跟踪 (dotnet-stack)

2022-01-09 11:52:27 浏览数 (1)

本文适用于:✔️ .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 应用程序的转储

0 人点赞