并发可视化工具命令行实用工具 (CVCollectionCmd)

可以使用并发可视化工具命令行实用工具(CVCollectionCmd.exe)从命令行收集跟踪,以便可以在 Visual Studio 的并发可视化工具中查看它们。 这些工具可用于未安装 Visual Studio 的计算机上。

注释

并发可视化工具是一个可选扩展。 (以前它已包含在 Visual Studio 中。可以从下载中心下载 Visual Studio 的并发可视化工具集合工具

下载并发可视化工具命令行实用工具

若要下载并安装命令行实用工具,请转到 适用于 Visual Studio 的并发可视化工具集合工具 ,并按照说明作。 默认情况下, CVCollectionCmd.exe 安装在 %ProgramFiles%\Microsoft 并发可视化工具集合工具\ (%ProgramFiles(x86)%\Microsoft 并发可视化工具集合工具\ 在 x64 计算机上)。

使用 CVCollectionCmd 收集追踪

可以通过使用 CVCollectionCmd 启动应用或通过附加到它来收集跟踪。 有关选项,请参阅下面的命令参考。 例如:

<Path>CVCollectionCmd /launch c:\myapp\myapp.exe /outdir c:\myapp\data

命令和参数

若要获取有关命令行实用工具中的命令和参数的帮助,请在命令提示符处键入以下命令:

CvCollectionCmd /?

选项 Description 参数 返回值
Query 返回是否可以启动集合。 None 如果集合已准备好启动,则为 0。

如果集合已在进行中,则为 1。

如果集合未进行,但已启用一个或多个必需的 ETW 会话,则为 2。
Launch 在并发可视化工具下运行指定的进程。 可执行文件的路径。 如果运行成功,则为 0。

如果由于无法启动目标应用程序而运行失败,则为 1。

如果运行失败,因为 CVCollectionCmd 没有足够的权限写入指定的输出目录,则为 13。
Attach 开始收集系统范围的跟踪。如果指定了某个进程,则附加到该进程。 没有。 如果附件成功,返回值为 0。

如果附件因指定的进程无效或不明确而失败,则为 1。

如果附件失败,因为 CVCollectionCmd 没有足够的权限写入指定的输出目录,则为 13。
Detach 停止采集。 没有。 如果分离成功,则为 0。

如果由于集合未在进行而导致分离失败,则为 1。

如果由于无法停止收集导致分离失败,返回2。
Analyze 分析指定的迹线。 CVTrace 文件的完整路径。 如果分析成功,则为 0。

如果分析无法启动,是因为指定的跟踪覆盖了整个系统范围,但没有指定目标进程。

如果分析无法启动,因为跟踪不是系统范围的,又指定了一个进程,那么条件2适用。

3 如果分析失败时,因为指定的进程无效。

4 如果分析失败,因为指定的 CVTrace 文件无效。
LaunchArgs 指定目标可执行参数。 此选项仅适用于 Launch 命令。 应用程序的命令行参数。 没有。
Outdir 指定要在其中保存跟踪文件的目录。 适用于启动和附加命令。 目录路径或相对路径。 没有。
流程 指定在执行 Attach 命令时要附加到的进程,或在执行 Analyze 命令时要分析的跟踪中的进程。 适用于“附加”和“分析”指令。 PID 或进程的名称。 没有。
Config 如果想要除默认值以外的集合设置,请指定配置文件的路径。 适用于启动、附加和分析命令。 XML 配置文件的目录路径或相对路径。 没有。

自定义配置设置

如果使用 CVCollectionCmd 收集跟踪,并且想要自定义收集设置,请使用配置文件来指定它们。

注释

使用 Visual Studio 收集跟踪时,请不要直接修改配置文件。 请改用 “高级设置” 对话框修改设置。

若要修改集合设置,请在运行 CVCollectionCmd 实用工具的计算机上创建配置文件。 可以从头开始创建配置文件,也可以复制已安装并修改 Visual Studio 的计算机上的配置文件。 该文件命名 为UserConfig.xml ,位于 本地 AppData 文件夹中。 运行实用工具时,将 Config 选项与启动、附加或分析命令结合使用。 在与配置选项关联的参数中,指定配置文件的路径。

配置文件标记

配置文件基于 XML。 下面是有效的标记和值:

标记 Description 价值观
Config 对总体配置文件进行划分。 必须包含以下元素:

- 小版本号
- 主版本
MajorVersion 指定配置文件的主要版本。 对于大多数 Visual Studio 项目,必须为 1。 如果不是 1,则实用工具将不起作用。
MinorVersion 指定配置文件的次要版本。 对于大多数 Visual Studio 项目,必须为 0。 如果不是 0,则实用工具将不起作用。
包含环境符号路径 设置一个值,该值确定是否使用环境符号路径(_NT_SYMBOL_PATH)。 -真
- 错误
分析后删除ETLs 设置一个值,该值确定分析完成后是否删除 ETL 文件。 - 真
- 错误
符号路径 (SymbolPath) 指定符号服务器的路径。 有关详细信息,请参阅 使用Microsoft符号服务器获取调试符号文件 目录名称或 URL。
标记 包含标记提供程序的列表。 可以包含零个或多个 MarkerProvider 元素。
标记提供者 指定单个标记提供程序。 必须包含以下元素:

-水平
- GUID
- 名称

可以包含以下元素:

-类别
- IsEnabled
级别 设置 MarkerProvider 的重要性级别。 -低
-正常
- 高级
-危急
一切
Guid ETW 标记提供程序的全局唯一标识符。 GUID。
Name 标记提供程序的描述。 一个字符串。
类别 指定标记提供程序所收集的类别。 以逗号分隔的数字字符串或数字范围。
已启用 设置一个值,用于确定是否启用标记提供程序以进行收集。 -真
- 错误
FilterConfig 指定从集合中筛选的 ETW 事件的配置选项列表。 可能包含以下元素:

- CollectClrEvents
- ClrCollectionOptions
- 收集示例事件 (CollectSampleEvents)
- CollectGpuEvents
- CollectFileIO
CollectClrEvents 设置一个值,该值确定是否收集 CLR 事件。 -真
- 错误
ClrCollectionOptions 指定是否为本机应用收集 CLR 事件,以及是否收集 NGEN 卸载事件。 可以包含其中一个、两个值或不包含这些值:

- CollectForNative
- DisableNGenRundown
收集示例事件 设置一个值,该值确定是否收集示例事件。 -真
- 错误
CollectGpuEvents 设置一个值,该值确定是否收集 DX 生成的事件。 -真
- 错误
CollectFileIO 设置一个值,该值确定是否收集文件 I/O 事件。 -真
- 错误
用户缓冲设置 指定用户缓冲区设置参数的列表。 必须包含以下元素:

- BufferFlushTimer
- BufferSize
- MinimumBuffers
- 最大缓冲区
内核缓冲区设置 指定内核缓冲区设置参数的列表。 必须包含以下元素:

- BufferFlushTimer
- BufferSize
- 最小缓冲区(MinimumBuffers)
- MaximumBuffers
缓冲清空计时器 指定 ETW 缓冲区的刷新计时器。 正整数。
BufferSize(缓冲区大小) 为每个事件跟踪会话缓冲区分配的内存量(以 KB 为单位)。 从 0 到 1024 的数字。
最小缓冲区数 (MinimumBuffers) 为事件跟踪会话的缓冲池分配的最小缓冲区数。 大于或等于逻辑核心数两倍的正整数。
最大缓冲区 为事件跟踪会话的缓冲池分配的最大缓冲区数。 大于或等于 MinimumBuffers的一个数。
JustMyCode 指定“仅我的代码”目录的列表。 零个或多个 MyCodeDirectory 元素的列表。
MyCodeDirectory 指定包含代码的目录。 绝对路径。

Example

可以复制以下示例,然后对其进行修改以满足要求,而不是从头开始创建配置文件。

<?xml version="1.0"?>
<LocalConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" MajorVersion="1" MinorVersion="0">

  <IncludeEnvSymbolPath>true</IncludeEnvSymbolPath>

  <DeleteEtlsAfterAnalysis>true</DeleteEtlsAfterAnalysis>

  <TraceLocation>C:\traces</TraceLocation>

  <SymbolPath>http://symweb</SymbolPath>

  <Markers>
    <MarkerProvider Name="Default" Guid="8d4925ab-505a-483b-a7e0-6f824a07a6f0" Level="Low" />
    <MarkerProvider Name="TPL" Guid="2e5dba47-a3d2-4d16-8ee0-6671ffdcd7b5" Level="Normal" />
    <MarkerProvider Name="TPL Dataflow" Guid="16f53577-e41d-43d4-b47e-c17025bf4025" Level="Normal" />
    <MarkerProvider Name="TPL Synchronization" Guid="ec631d38-466b-4290-9306-834971ba0217" Level="Normal" />
    <MarkerProvider Name="PLINQ" Guid="159eeeec-4a14-4418-a8fe-faabcd987887" Level="Normal" />
    <MarkerProvider Name="Concurrency Runtime" Guid="f7b697a3-4db5-4d3b-be71-c4d284e6592f" Level="Normal" />
    <MarkerProvider Name="Scenario Markers" Guid="fb9244c9-f23a-4966-8a9c-97a51f8c355b" Level="Low" />

    <!-- The IsEnabled and Categories elements are optional -->
    <MarkerProvider Name="myMarker1" Guid="d0dbb3a3-895c-4ce6-96d9-28f69d664dc3" Level="Critical" IsEnabled="false" Categories="0,1,3-5,8" />
    <MarkerProvider Name="myMarker2" Guid="03452127-a617-4302-9e30-c0d10442e4ee" Level="Low" IsEnabled="false" Categories="0,1,3-5,8-10,11-13" />
  </Markers>

  <FilterConfig>
    <CollectClrEvents>true</CollectClrEvents>
    <ClrCollectionOptions>CollectForNative DisableNGenRundown</ClrCollectionOptions>
    <CollectSampleEvents>true</CollectSampleEvents>
    <CollectGpuEvents>true</CollectGpuEvents>
    <CollectFileIO>true</CollectFileIO>
  </FilterConfig>

  <UserBufferSettings>
    <BufferFlushTimer>0</BufferFlushTimer>
    <BufferSize>256</BufferSize>
    <MinimumBuffers>512</MinimumBuffers>
    <MaximumBuffers>1024</MaximumBuffers>
  </UserBufferSettings>

  <KernelBufferSettings>
    <BufferFlushTimer>0</BufferFlushTimer>
    <BufferSize>256</BufferSize>
    <MinimumBuffers>512</MinimumBuffers>
    <MaximumBuffers>1024</MaximumBuffers>
  </KernelBufferSettings>

  <!-- List of MyCodeDirectory directories -->
  <JustMyCode>
    <MyCodeDirectory>C:\myBinaries1</MyCodeDirectory>
    <MyCodeDirectory>C:\myBinaries2</MyCodeDirectory>
  </JustMyCode>
</LocalConfig>