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

2022-01-08 18:04:40 浏览数 (1)

本文适用于:✔️ .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
  • 运行下面的命令: 控制台复制 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

0 人点赞