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

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

说明说明

对于 Visual Studio 2013,并发可视化工具是可选扩展。(在 Visual Studio 的某些早期版本中,并发可视化工具已包括在内。)你可以从 Visual Studio 网站下载并发可视化工具

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

若要下载并安装命令行实用程序,请转到 Microsoft 下载中心网站上的 Visual Studio 2013 的并发可视化工具收集工具并遵循说明操作。默认情况下,CVCollectionCmd.exe 安装在 %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools\(在 x64 计算机上为 %ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\)。

使用 CVCollectionCmd 收集跟踪

通过使用 CVCollectionCmd 启动应用,或通过附加到该应用,你可以收集跟踪。对于选项,请参阅以下命令参考。例如

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

命令和参数

若要获得有关命令行实用程序中的命令和参数的帮助,请在命令提示符处键入:

CvCollectionCmd /?

选项

描述

参数

返回值

查询

返回是否可以启动收集。

如果准备开始启动收集,则为 0。

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

如果收集未在进行,但是已经启用一个或多个必需的 ETW 会话,则为 2。

启动

在并发可视化工具下运行指定的进程。

可执行文件的路径。

如果运行已成功,则为 0。

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

如果因为 CVCollectionCmd 没有足够的权限写入指定的输出目录而运行失败,则为 13。

Attach

开始收集系统级跟踪,否则如果指定了一个进程,则附加到该进程。

无。

如果附加成功,则为 0。

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

如果因为 CVCollectionCmd 没有足够的权限写入指定的输出目录而附加失败,则为 13。

Detach

停止收集。

无。

如果分离成功,则为 0。

如果因为收集当前没有进行而分离失败,则为 1。

如果因为无法停止收集而分离失败,则为 2。

分析

分析指定的跟踪。

CVTrace 文件的完整路径。

如果分析成功,则为 0。

如果因为指定的跟踪为系统级但是未指定目标进程而无法启动分析,则为 1。

如果因为跟踪并非系统级并且未指定进程而无法启动分析,则为 2。

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

如果因为指定的 CVTrace 文件无效而分析失败,则为 4。

LaunchArgs

指定目标可执行文件参数。此选项仅适用于“启动”命令。

应用程序的命令行参数。

无。

Outdir

指定用于保存跟踪文件的目录。适用于“启动”和“附加”命令。

目录路径或相对路径。

无。

进程

当执行“附加”命令时,指定要附加到的进程,或者当执行“分析”命令时,指定要分析的跟踪中的进程。适用于“附加”和“分析”命令。

PID 或进程的名称。

无。

配置

如果你想要收集设置而非默认值,则指定配置文件的路径。适用于“启动”、“附加”和“分析”命令。

XML 配置文件的目录路径或相对路径。

无。

自定义配置设置

如果你使用 CVCollectionCmd 来收集跟踪并且希望自定义收集设置,则使用配置文件来指定它们。

说明说明

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

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

配置文件标记

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

标记

描述

配置

划分整体配置文件。

必须包含以下元素:

  • MinorVersion

  • MajorVersion

MajorVersion

指定配置文件的主要版本。

对于 Visual Studio 2012 项目,必须为 1。如果不是 1,则实用工具不起作用。

MinorVersion

指定配置文件的次要版本。

对于 Visual Studio 2012 项目,必须为 0。如果不是 0,则实用工具不起作用。

IncludeEnvSymbolPath

设置一个值,该值确定是否使用环境符号路径 (_NT_SYMBOL_PATH)。

  • True

  • False

DeleteEtlsAfterAnalysis

设置一个值,该值确定是否在分析完成时,删除 ETL 文件。

  • True

  • False

SymbolPath

指定符号服务器的路径。有关更多信息,请参阅使用 Microsoft 符号服务器获取调试符号文件

目录名或 URL。

标记

包含标记提供程序的列表。

可能不包含也可能包含多个 MarkerProvider 元素。

MarkerProvider

指定单个标记提供程序。

必须包含以下元素:

  • 级别

  • GUID

  • 名称

可以包含以下元素:

  • 类别

  • IsEnabled

级别

设置 MarkerProvider 的重要性级别。

  • 正常

  • 严重

  • 全部

Guid

ETW 标记提供程序的全局唯一标识符。

一个 GUID。

名称

指定标记提供程序的说明。

一个字符串。

类别

指定为标记提供程序收集的类别。

一个以逗号分隔的数字或数字范围的字符串。

IsEnabled

设置一个值,该值确定是否针对收集启用标记提供程序。

  • True

  • False

FilterConfig

指定 ETW 事件的配置选项的列表,这些事件筛选自收集。

可能包含以下元素:

  • CollectClrEvents

  • ClrCollectionOptions

  • CollectSampleEvents

  • CollectGpuEvents

  • CollectFileIO

CollectClrEvents

设置一个值,该值确定是否收集 CLR 事件。

  • True

  • False

ClrCollectionOptions

指定是否针对本机应用收集 CLR 事件,并且是否收集 NGEN 断开事件。

可能包含下列值中的一个值、两个值或都不包含:

  • CollectForNative

  • DisableNGenRundown

CollectSampleEvents

设置一个值,该值确定是否收集样本事件。

  • True

  • False

CollectGpuEvents

设置一个值,该值确定是否收集由 DX 生成的事件。

  • True

  • False

CollectFileIO

设置一个值,该值确定是否收集文件 I/O 事件。

  • True

  • False

UserBufferSettings

指定用户缓冲区设置参数的列表。

必须包含以下元素:

  • BufferFlushTimer

  • BufferSize

  • MinimumBuffers

  • MaximumBuffers

KernelBufferSettings

指定内核缓冲区设置参数的列表。

必须包含以下元素:

  • BufferFlushTimer

  • BufferSize

  • MinimumBuffers

  • MaximumBuffers

BufferFlushTimer

指定 ETW 缓冲区的刷新计时器。

正整数。

BufferSize

为每个事件跟踪会话缓冲区分配的内存量(以 KB 为单位)。

介于 0 至 1024 之间的数字。

MinimumBuffers

为事件跟踪会话的缓冲池分配的缓冲区最小数目。

一个大于或等于逻辑内核数两倍的正整数。

MaximumBuffers

为事件跟踪会话的缓冲池分配的缓冲区的最大数目。

一个大于或等于 MinimumBuffers 的数字。

JustMyCode

指定“仅我的代码”目录的列表。

零个或多个 MyCodeDirectory 元素的列表。

MyCodeDirectory

指定包含代码的目录。

绝对路径。

示例

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

<?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>