dotTrace 2025.2 Help

使用 dotTrace 命令行分析器

有时需要自动化收集性能快照的过程,例如,您希望将分析作为持续集成构建的一部分(例如,这可以是执行集成测试分析的构建步骤)。 为此,dotTrace 提供了一组适用于 Windows、macOS 和 Linux 的命令行工具:

操作系统

工具

分发

Windows

macOS

Linux

使用命令行工具分析应用程序

  1. 根据您的分析场景,使用所需选项运行 dotTrace.exe 。 例如:

    • 运行并使用 Timeline 分析类型分析独立应用程序 App.exe

      dotTrace.exe start --save-to=c:\Snapshots\snapshot.dtt --profiling-type=Timeline c:\MyApp\App.exe
    • 运行并使用默认的 Sampling 分析类型分析独立应用程序 App.exe ,并通过 分析 API 控制会话:

      dotTrace.exe start --save-to=c:\Snapshots\snapshot.dtp c:\MyApp\App.exe --use-api
    • 附加到正在运行的应用程序 PID=1234 ,并使用 Sampling 分析类型对其进行分析:

      dotTrace.exe attach 1234 --save-to=c:\Snapshots\snapshot.dtp
    • 要查看所有可用选项的完整列表,请在不带任何参数的情况下运行该工具:

      dotTrace.exe

    在被分析的应用程序完成工作后,命令行分析器将自动保存性能快照。

    如果您希望随时手动获取快照,可以通过 向分析器的 stdin 发送消息或写入磁盘上的文件 来实现。

  2. 使用独立的 dotTrace、 Rider 中的 dotTrace报告工具 分析快照。

  1. 根据您的分析场景,使用所需选项运行 dotTrace.sh 。 例如:

    • 运行并分析 Mono 应用程序 myMonoApp

      ./dotTrace.sh start --framework=Mono /usr/bin/mono /home/Projects/MyMonoApp/myMonoApp --profiling-type=Timeline --timeout=10s --save-to=./snapshots/snapshot.dtt

      请注意,我们必须将 /usr/bin/mono 指定为分析目标,并使用 时间线 分析类型(其他类型在 macOS 和 Linux 上的 Mono 中 不支持)。

    • 运行并分析 .NET Core 3.1(或更高版本)应用程序 MyNetCoreApp.dll

      ./dotTrace.sh start --framework=NetCore /usr/bin/dotnet /home/Projects/MyNetCoreApp/MyNetCoreApp.dll --timeout=10s --save-to=./snapshots/snapshot.dtp
    • 运行并分析 .NET Core 3.0(或更早版本)应用程序 MyNetCoreApp.dll

      ./dotTrace.sh start --framework=NetCore /usr/bin/dotnet /home/Projects/MyNetCoreApp/MyNetCoreApp.dll --support-earlier-net-core --timeout=10s --save-to=./snapshots/snapshot.dtp
    • 附加到正在运行的应用程序 PID=1234 ,并使用 Sampling 分析类型对其进行分析:

      ./dotTrace.sh attach 1234 --save-to=./snapshots/snapshot.dtp
    • 要查看所有可用选项的完整列表,请在不带任何参数的情况下运行该工具:

      ./dotTrace.sh

    在被分析的应用程序完成工作后,命令行分析器将自动保存性能快照。

  2. 使用独立的 dotTrace 或 Rider 中的 dotTrace 分析快照。

通过 stdin 或文件控制分析会话

有时需要直接控制分析过程,例如,通过直接命令在某个确切的时刻获取快照。 可以通过以下方式实现:

  • dotTrace.exe | dotTrace.sh 的 stdin 发送消息,

  • 将消息写入磁盘上的文件。

启动 MyApp.exe 并通过 stdin 消息控制分析

  1. 您可以使用 attachstart 命令开始分析。

    如果您希望使用 stdin 控制会话:

    dotTrace.exe start --service-input=stdin c:\MyApp\MyApp.exe

    如果您希望使用文件控制会话:

    dotTrace.exe start --service-input=file.txt c:\MyApp\MyApp.exe

    请注意,您必须在运行会话之前创建该文件。

  2. 通过将以下命令发送到 stdin 或写入 file.txt 获取快照:

    ##dotTrace["get-snapshot", {pid:1234}]

    如果指定了 pid ,dotTrace 将获取具有指定 PID 的进程的快照。 否则,dotTrace 将获取所有被分析进程的快照。

  3. 要停止分析并终止被分析的应用程序,请将以下命令发送到 stdin 或 file.txt:

    ##dotTrace["disconnect"]

dotTrace 通过向 stdout 发送特殊服务消息来告知您分析过程的进展。 如果您通过某些外部脚本控制分析,这可能特别有用。 输出示例:

D:\dotTrace> .\dotTrace.exe start --service-input=stdin C:\MyApp\MyApp.exe dotTrace Console Profiler 2020.2 Copyright (C) 2020 JetBrains s.r.o. Profiling in progress... ##dotTrace["ready"] You can control profiling by sending command messages to stdin. For details, type ##dotTrace["help"] Executable='C:\MyApp\MyApp.exe' (non-child) is being passed for filtering Passed filter executable='C:\MyApp\MyApp.exe' ##dotTrace["connected",{"pid":19016,"path":"C:\\MyApp\\MyApp.exe"}] ##dotTrace["started",{"pid":19016,"path":"C:\\MyApp\\MyApp.exe"}] ##dotTrace["get-snapshot"] ##dotTrace["stopped",{"pid":19016,"path":"C:\\MyApp\\MyApp.exe"}] ##dotTrace["snapshot-saved",{"pid":19016,"filename":"D:\\dotTrace\\Zupifix.dtp"}]

启动 myApp 并通过 stdin 消息控制分析

  1. 您可以使用 attachstart 命令开始分析。

    如果您希望使用 stdin 控制会话:

    ./dotTrace.sh start --framework=NetCore --service-input=stdin ~/MyApp/myApp

    如果您希望使用文件控制会话:

    ./dotTrace.sh start --framework=NetCore --service-input=file.txt ~/MyApp/myApp

    请注意,您必须在运行会话之前创建该文件。

  2. 通过将以下命令发送到 stdin 或写入 file.txt 获取快照:

    ##dotTrace["get-snapshot", {pid:1234}]

    如果指定了 pid ,dotTrace 将获取具有指定 PID 的进程的快照。 否则,dotTrace 将获取所有被分析进程的快照。

  3. 要停止分析并终止被分析的应用程序,请将以下命令发送到 stdin 或 file.txt:

    ##dotTrace["disconnect"]

dotTrace 通过向 stdout 发送特殊服务消息来告知您分析过程的进展。 如果您通过某些外部脚本控制分析,这可能特别有用。 输出示例:

./dotTrace.sh start --framework=NetCore --service-input=stdin ~/MyApp/myApp dotTrace Console Profiler 2020.2 Copyright (C) 2020 JetBrains s.r.o. Profiling in progress... ##dotTrace["ready"] You can control profiling by sending command messages to stdin. For details, type ##dotTrace["help"] Executable='~/MyApp/myApp' (non-child) is being passed for filtering Passed filter executable='~/MyApp/myApp' ##dotTrace["connected",{"pid":19016,"path":"~/MyApp/myApp"}] ##dotTrace["started",{"pid":19016,"path":"~/MyApp/myApp"}] ##dotTrace["get-snapshot"] ##dotTrace["stopped",{"pid":19016,"path":"~/MyApp/myApp"}] ##dotTrace["snapshot-saved",{"pid":19016,"filename":"~/dotTrace/Zupifix.dtp"}]

命令行分析器退出代码

默认情况下,如果工具成功完成其工作,其退出代码为 0。 在某些情况下,这可能会带来不便。 例如,如果您在 CI 服务器上运行该工具,您可能需要获取被分析应用程序的退出代码(例如,单元测试运行器)。 要使分析器返回被分析目标的退出代码,请使用 --propagate-exit-code 参数。

例如(在 Windows 上):

dotTrace.exe start --save-to=c:\Snapshots\snapshot.dtp --profiling-type=Sampling c:\MyApp\App.exe --propagate-exit-code

(可选,仅限 Windows)使用 XML 文件配置分析

上面的部分 ,我们已将分析配置(分析目标、分析方法等)作为 dotTrace.exe 参数提供。 如果您不希望以这种方式配置会话,您可以在 XML 文件中提供配置。

为了简化文件创建,您可以使用 Configuration2Xml32.exe (以及 64 位版本 Configuration2Xml64.exe )工具。 此工具允许您使用 dotTrace 主窗口的熟悉用户界面创建 XML 配置文件。

使用 Configuration2Xml 创建或修改配置文件

  1. 运行位于 dotTrace 安装目录中的 Configuration2Xml32.exe Configuration2Xml64.exe 工具(默认情况下为 C:\Users\[username]\AppData\Local\JetBrains\Installations\dotTrace[N] )。

  2. 要创建新的分析配置,请选择 创建新配置 菜单。

    要修改现有的分析配置,请选择 打开配置

  3. 在 dotTrace 主窗口中,按照 您通常的方式指定分析选项。

  4. 点击 保存 并指定配置文件的文件名和路径。

  5. 点击 保存

运行通过 XML 文件配置的分析会话

  • 在命令行中运行以下命令:

    dotTrace.exe xmlfile <path_to_config> --save-to=<path_to_snapshot>

    where:

    • <path_to_config> - XML 配置文件的路径。

    • <path_to_snapshot> - 生成的快照文件的路径。 请注意,您可以指定完整路径(包括快照文件名)或仅指定目录路径而不包含文件名。 在后一种情况下,快照文件将获得一个随机名称。

    例如:

    dotTrace.exe xmlfile config.xml --save-to=c:\Snapshots\snapshot.dtp

作为 .NET Core 工具安装和使用命令行工具

如果您的机器上安装了 .NET Core 3.1.0 或更高版本 ,您可以将 dotTrace 命令行工具作为 .NET Core 全局和本地工具 安装和使用。

安装 dotTrace 命令行工具

  • 要将 dotTrace 命令行工具作为 全局 .NET Core 工具 安装到默认位置,请运行以下命令行:

    dotnet tool install --global JetBrains.dotTrace.GlobalTools
  • 要将 dotTrace 命令行工具作为 本地工具 安装,您可以在本地执行以下操作:

    dotnet new tool-manifest dotnet tool install JetBrains.dotTrace.GlobalTools
  • 有关进一步的说明,请参阅官方 Microsoft 文档。

运行 dotTrace 命令行工具

  • 使用 dottrace 命令运行分析。 该命令接受与 dotTrace.exe (在 Windows 上)或 dotTrace.sh (在 Linux 和 macOS 上)相同的参数。 例如,要开始对 MyApp.exe 的 Timeline 分析,请打开解决方案目录并运行:

    dottrace start --profiling-type=Timeline .\MyApp\bin\Release\MyApp.exe

(仅限 Windows)使用 Reporter.exe 工具生成性能报告

Reporter.exe 工具可以以两种模式工作:

  • 获取特定方法的性能数据
    生成的 XML 报告获取特定方法的执行时间和调用次数 * 数据。

  • 比较快照
    生成的 XML 报告获取特定方法的执行时间和调用次数差异 * 数据。 此模式对于将最新构建中获取的性能数据与某些参考快照进行比较特别有用。

无论您选择哪种模式,您都应指定应添加到报告中的方法名称。

1. 为报告指定方法

必须添加到报告中的方法列表由 XML 模式文件定义。

创建模式文件

  1. 在您选择的编辑器中,创建一个空白的 XML 文件。

  2. 按照下面的示例编写必须添加到报告中的方法列表。

    <Patterns> <Pattern PrintCallstacks = "MethodNameOnly">Method1</Pattern> <Pattern>Method2</Pattern> </Patterns>

    where:

    • Method1Method2 - 匹配您希望获取性能数据的方法名称(而非名称的子字符串)的正则表达式。 请注意,如果方法名称包含特殊字符,您应使用反斜杠 \ 符号对其进行转义。 例如, MyMethod\+MySubMethod

    • PrintCallstacks - 可选属性,允许在报告中包含调用堆栈数据(此类报告的示例显示在 下方)。 PrintCallstacks 有两个可用值:

      • Full - 调用堆栈中将显示完全限定的方法名称。

      • MethodNameOnly - 调用堆栈中将仅显示方法名称(不包括命名空间和类名)。

  3. 保存文件。

2a. 生成性能报告

生成性能报告

  • 在命令行中运行以下命令:

    Reporter.exe report <path_to_snapshot> --pattern=<path_to_pattern> --save-to=<path_to_report>

    where:

    • <path_to_snapshot> - 源快照文件的路径。

    • <path_to_pattern> - 包含添加到报告中的方法名称的 XML 模式文件的路径。

    • <path_to_report> - 生成的报告文件的路径。

例如:

Reporter.exe report c:\Snapshots\snapshot.dtp --pattern=pattern.xml --save-to=c:\Reports\report.xml

报告示例

<Report> <Info> <Snapshot IndexFile="C:\snapshot1.dtp" Executable="C:\Temp\ConsoleAppTest.exe" CommandLine="C:\Temp\ConsoleAppTest.exe" /> </Info> <Function FQN="Tests.Method1" TotalTime="500" OwnTime="100" Calls="1" /> <Function FQN="Tests.Method2" TotalTime="400" OwnTime="200" Calls="10" /> </Report>

where:

  • FQN - 完整的方法名称。

  • TotalTime - 方法调用子树的执行时间。

  • OwnTime - 方法自身的执行时间。

  • 调用次数 - 调用次数。

如果在 XML 模式文件中为某个 Pattern 指定了 PrintCallstacks 属性,则报告将包含额外的调用堆栈数据。 例如,为某个 GetFileNames 函数指定了 <Pattern PrintCallstacks = "MethodNameOnly">。 在这种情况下,生成的报告中相应的 Function 节点将包含一个额外的 Instance 子节点,其中包含调用堆栈:

<Function Id="0x0020000C" FQN="MyApplication.MainWindow.GetFileNames" TotalTime="12520" OwnTime="0" Calls="1740" Instances="1"> <Instance CallStack="Main/Run/Run/RunInternal/RunDispatcher/PushFrame/PushFrameImpl/OnClick/RaiseEvent/RaiseEventImpl/InvokeHandlersImpl/InvokeHandler/btnSelectFiles_Click/GetFileNames" TotalTime="12520" OwnTime="0" Calls="1740" /> </Function>

2b. 生成快照差异报告

比较两个快照并生成差异报告

  • 在命令行中运行以下命令:

    Reporter.exe compare <path_to_snapshot1> <path_to_snapshot2> --pattern=<path_to_pattern> --save-to=<path_to_report>

    where:

    • <path_to_snapshot1> - 参考快照文件的路径。

    • <path_to_snapshot2> - 第二个快照文件的路径。

    • <path_to_pattern> - 包含添加到报告中的方法名称的 XML 模式文件的路径。

    • <path_to_report> - 生成的报告文件的路径。

例如:

Reporter.exe compare c:\Snapshots\base_snapshot.dtp c:\Snapshots\snapshot.dtp --pattern=pattern.xml --save-to=c:\Reports\report.xml

生成的报告文件类似于您在“报告”模式下获得的文件,唯一的区别是:所有字段将不包含绝对时间或调用次数值,而是包含快照之间的差值。 根据差值符号,值将以 +- 前缀开头。

最后修改日期: 2025年 9月 28日