并发可视化工具命令行实用工具 (CVCollectionCmd)
并发可视化工具命令行实用程序 (CVCollectionCmd.exe) 可用于收集和处理不了 Visual Studio 的计算机上的跟踪。 您可以打开,以便您可以看到这些并发可视化工具中有 Visual Studio 的计算机上的收集的跟踪。
安装和部署该应用工具
若要从 Visual Studio DVD 安装
在 DVD 上查找最上层的文件夹名为"并发可视化工具"。
在此文件夹中,运行 concvi_standalonecollection.exe。
安装从 Web 安装文件 Visual Studio
找到您下载的安装文件。 文件名称取决于您所下载的 Visual Studio 的版本。
打开命令提示符窗口,转到安装文件所在的目录。
运行命令<install file>/layout,其中install file是您下载的文件的名称。 布局命令创建一个文件夹名为"并发可视化工具"。
在"并发可视化工具"文件夹中,运行 concvi_standalonecollection.exe。
没有 Visual Studio 的计算机上部署
找到了 Visual Studio 的计算机上的 concvi_standalonecollection.exe。 (请参阅前面的两个步骤)。
将复制的计算机不具有 Visual Studio 的 concvi_standalonecollection.exe。
运行 concvi_standalonecollection.exe。
命令和参数
您可以通过使用获得这些命令和参数的帮助:
CvCollectionCmd /?
选项 |
说明 |
参数 |
返回值 |
---|---|---|---|
查询 |
返回是否可以启动集合。 |
无 |
如果集合是可以开始为 0。 1 如果集合已在进行中。 如果集合不是在进度,但一个或多个所需的 2 ETW 会话已启用。 |
启动 |
将指定的进程并发可视化工具下运行。 |
可执行文件的路径。 |
0 (如果运行成功。 如果在运行失败,因为无法启动目标应用程序,则为 1。 13 如果运行失败,因为 CVCollectionCmd 没有足够的权限,将写入指定的输出目录。 |
附加 |
开始收集系统级跟踪。 如果指定,否则,将附加到进程。 |
无。 |
如果附件已成功为 0。 如果连接失败,因为指定的进程是无效的或不明确,则为 1。 13 如果附件失败,因为 CVCollectionCmd 没有足够的权限,将写入指定的输出目录。 |
分离 |
停止收集。 |
无。 |
如果成功 detachment,0。 1 如果 detachment 失败,因为集合不是当前正在进行中。 2 如果 detachment 失败,因为集合不能停止。 |
分析 |
分析指定的跟踪。 |
CVTrace 文件的完整路径。 |
0,如果分析成功。 如果无法启动分析,因为指定的跟踪的系统范围内,但是没有目标进程指定为 1。 指定如果分析不能启动,因为系统和过程跟踪不是 2。 3 如果分析失败,因为指定的进程无效。 4 如果分析失败,因为指定的 CVTrace 文件是无效的。 |
LaunchArgs |
指定的目标可执行参数。 此选项适用于的产品发布命令。 |
要应用程序的命令行参数。 |
无。 |
Outdir |
指定要在其中保存跟踪文件的目录。 适用于启动和连接命令。 |
目录路径或相对路径。 |
无。 |
进程 |
指定跟踪分析分析命令执行时要执行的附加命令时,要连接的进程。 适用于附加和分析命令。 |
PID 或进程的名称。 |
无。 |
配置 |
如果您希望收藏设置非默认值,指定的配置文件的路径。 适用于启动、 连接和分析命令。 |
目录路径或相对路径的 XML 配置文件中。 |
无。 |
自定义配置设置
如果您使用 CVCollectionCmd 收集跟踪所需的自定义设置集合,然后使用配置文件指定它们。
备注
当使用 Visual Studio 收集跟踪时,不要直接修改配置文件。相反,使用高级设置修改设置的对话框。
要修改集合的设置,创建配置文件在计算机上的运行 CVCollectionCmd 实用程序。 从零开始,您可以创建配置文件,或者可以将配置文件的计算机上已安装的 Visual Studio 的复制和修改的。 文件的名称是UserConfig.xml ,它位于本地 AppData 文件夹。 当您运行该应用工具时,配置选项一起使用的启动、 连接或分析命令。 具有相关联的配置选项的参数中指定的配置文件的路径。
配置文件标签
配置文件是基于 XML 的。 下面是有效的标签和值:
Tag |
说明 |
值 |
---|---|---|
配置 |
Demarcates 总体配置文件。 |
必须将包含这些元素:
|
MajorVersion |
指定配置文件的主要版本。 |
必须为 1 的Visual Studio 2012项目。 如果不是 1,该实用程序将不起作用。 |
MinorVersion |
指定配置文件的次要的版本。 |
必须为 0,对于Visual Studio 2012项目。 如果不是 0,该实用程序将不起作用。 |
IncludeEnvSymbolPath |
设置一个值,决定是否使用环境符号路径 (_NT_SYMBOL_PATH)。 |
|
DeleteEtlsAfterAnalysis |
设置一个值,决定是否在分析完成时删除 ETL 文件。 |
|
SymbolPath |
指定符号服务器的路径。 有关详细信息,请参阅使用 Microsoft 符号服务器来获得调试符号文件。 |
目录名称或 URL。 |
Markers |
包含标记提供程序的列表。 |
可能包含零个或多个 MarkerProvider 元素。 |
MarkerProvider |
指定一个单独的标记提供程序。 |
必须将包含这些元素:
可以包含以下元素:
|
级别 |
设置 MarkerProvider 的重要性级别。 |
|
Guid |
ETW 标记提供程序的全局唯一标识符。 |
一个 GUID。 |
名称 |
指定标记提供程序的说明。 |
一个字符串。 |
类别 |
指定的标记提供程序收集到的类别。 |
以逗号分隔的数字或范围的数字字符串。 |
IsEnabled |
设置一个值,决定是否启用标记提供程序的集合。 |
|
FilterConfig |
指定集合中筛选 ETW 事件的配置选项的列表。 |
可能会包含这些元素:
|
CollectClrEvents |
设置一个值,决定是否要收集的 CLR 事件。 |
|
ClrCollectionOptions |
指定是否收集 CLR 事件对本机应用程序,以及是否收集 NGEN rundown 事件。 |
可能包含一个、 两个,或任何这些值:
|
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>