并发可视化工具命令行实用工具 (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 文件。以下是有效的标记和值:
标记 |
描述 |
值 |
---|---|---|
配置 |
划分整体配置文件。 |
必须包含以下元素:
|
MajorVersion |
指定配置文件的主要版本。 |
对于 Visual Studio 2012 项目,必须为 1。如果不是 1,则实用工具不起作用。 |
MinorVersion |
指定配置文件的次要版本。 |
对于 Visual Studio 2012 项目,必须为 0。如果不是 0,则实用工具不起作用。 |
IncludeEnvSymbolPath |
设置一个值,该值确定是否使用环境符号路径 (_NT_SYMBOL_PATH)。 |
|
DeleteEtlsAfterAnalysis |
设置一个值,该值确定是否在分析完成时,删除 ETL 文件。 |
|
SymbolPath |
指定符号服务器的路径。有关更多信息,请参阅使用 Microsoft 符号服务器获取调试符号文件。 |
目录名或 URL。 |
标记 |
包含标记提供程序的列表。 |
可能不包含也可能包含多个 MarkerProvider 元素。 |
MarkerProvider |
指定单个标记提供程序。 |
必须包含以下元素:
可以包含以下元素:
|
级别 |
设置 MarkerProvider 的重要性级别。 |
|
Guid |
ETW 标记提供程序的全局唯一标识符。 |
一个 GUID。 |
名称 |
指定标记提供程序的说明。 |
一个字符串。 |
类别 |
指定为标记提供程序收集的类别。 |
一个以逗号分隔的数字或数字范围的字符串。 |
IsEnabled |
设置一个值,该值确定是否针对收集启用标记提供程序。 |
|
FilterConfig |
指定 ETW 事件的配置选项的列表,这些事件筛选自收集。 |
可能包含以下元素:
|
CollectClrEvents |
设置一个值,该值确定是否收集 CLR 事件。 |
|
ClrCollectionOptions |
指定是否针对本机应用收集 CLR 事件,并且是否收集 NGEN 断开事件。 |
可能包含下列值中的一个值、两个值或都不包含:
|
CollectSampleEvents |
设置一个值,该值确定是否收集样本事件。 |
|
CollectGpuEvents |
设置一个值,该值确定是否收集由 DX 生成的事件。 |
|
CollectFileIO |
设置一个值,该值确定是否收集文件 I/O 事件。 |
|
UserBufferSettings |
指定用户缓冲区设置参数的列表。 |
必须包含以下元素:
|
KernelBufferSettings |
指定内核缓冲区设置参数的列表。 |
必须包含以下元素:
|
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>