共用方式為


並行視覺化工具命令列公用程式 (CVCollectionCmd)

您可以使用並行視覺化工具命令列公用程式 (CVCollectionCmd.exe) 從命令列收集追蹤,以便在 Visual Studio 的並行視覺化工具中檢視它們。 這些工具可用於未安裝 Visual Studio 的電腦。

備註

並行視覺化工具是選用擴充功能。 (先前已包含在 Visual Studio 中。您可以從下載中心下載 適用於 Visual Studio 的並行視覺化工具集合工具

下載 Concurrency Visualizer 命令列公用程式

若要下載並安裝命令列公用程式,請移至 Visual Studio 的並行視覺化工具集合工具 ,然後遵循指示。 根據預設, CVCollectionCmd.exe 會安裝在 \%ProgramFiles%Microsoft 並行視覺化工具集合工具\ (x64 電腦上的%ProgramFiles(x86)%\Microsoft 並行視覺化工具集合工具\) 中。

使用 CVCollectionCmd 收集追蹤

您可以使用 CVCollectionCmd 啟動應用程式,或附加至應用程式來收集追蹤。 請參閱下面的命令參考以取得您的選項。 例如:

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

命令和參數

若要取得命令列公用程式中命令和參數的說明,請在命令提示字元中輸入下列內容:

CvCollectionCmd /?

Option Description 參數 傳回值
Query 傳回是否可以啟動收集。 None 若集合已準備好開始,則值為 0。

1 如果收集已經在進行中。

2 如果收集未進行中,但已啟用一或多個必要的 ETW 會話。
Launch 在並行視覺化工具下執行指定的程序。 可執行檔的路徑。 如果執行成功,則為 0。

1 如果執行失敗,因為無法啟動目標應用程式。

13 如果執行失敗,因為 CVCollectionCmd 沒有足夠的權限寫入指定的輸出目錄。
Attach 開始收集全系統追蹤;否則,如果指定了處理程序,則會附加到該處理程序。 沒有。 如果附件成功,則為 0。

1 如果附件失敗,因為指定的處理程序無效或模棱兩可。

13 如果附件失敗,因為 CVCollectionCmd 沒有足夠的權限寫入指定的輸出目錄。
Detach 停止收集。 沒有。 如果分離成功,則為 0。

如果分離失敗,則為 1,因為目前未進行收集。

2 如果分離失敗,因為無法停止收集過程。
Analyze 分析指定的追蹤。 CVTrace 檔案的完整路徑。 如果分析成功,則為 0。

1 如果無法啟動分析,因為指定的追蹤是全系統,但未指定目標處理程序。

如果因追蹤未覆蓋全系統且指定了處理程序,導致無法開始分析,則返回2。

3 如果分析失敗,因為指定的處理程序無效。

4 如果分析失敗,因為指定的 CVTrace 檔案無效。
啟動引數 指定目標可執行檔引數。 此選項僅適用於啟動命令。 應用程式的命令列引數。 沒有。
輸出目錄 指定要儲存追蹤檔的目錄。 適用於啟動和連接命令。 目錄路徑或相對路徑。 沒有。
流程 指定執行「附加」指令時要附加的處理程序,或在執行「分析」命令時要分析的追蹤中的處理程序。 適用於「附加」和「分析」指令。 PID 或進程名稱。 沒有。
設定 指定組態檔的路徑,如果您想要預設值以外的集合設定。 適用於「啟動」、「附加」及「分析」指令。 XML 組態檔的目錄路徑或相對路徑。 沒有。

自訂組態設定

如果您使用 CVCollectionCmd 來收集追蹤,且想要自訂收集設定,請使用組態檔來指定它們。

備註

當您使用 Visual Studio 收集追蹤時,請勿直接修改組態檔。 請改用 [ 進階設定 ] 對話方塊來修改設定。

若要修改集合設定,請在您要執行 CVCollectionCmd 公用程式的電腦上建立組態檔。 您可以從頭開始建立組態檔,也可以在已安裝 Visual Studio 的電腦上複製組態檔並修改它。 該檔案名為 UserConfig.xml ,位於 Local AppData 資料夾中。 當您執行公用程式時,請將 Config 選項與 Launch、Attach 或 Analyze 命令結合使用。 在與 Config 選項相關聯的參數中,指定組態檔的路徑。

組態檔標籤

組態檔是以 XML 為基礎。 以下是有效的標籤和值:

標記 Description 價值觀
設定 標示整個組態檔。 必須包含下列元素:

- 次要版本
- 主要版本
主要版本 指定組態檔的主要版本。 對於大部分的 Visual Studio 專案,必須是 1。 如果不是 1,則該實用程序將無法工作。
次要版本 指定組態檔的次要版本。 對於大部分的 Visual Studio 專案,必須是 0。 如果不是 0,則該實用程式將無法運作。
IncludeEnvSymbol路徑 設定一個值,以決定是否使用環境符號路徑 (_NT_SYMBOL_PATH)。 - 正確
-偽
刪除 EtlsAfterAnalysis 設定值,以決定分析完成時是否刪除 ETL 檔案。 - 正確
-偽
符號路徑 指定符號伺服器的路徑。 如需詳細資訊,請參閱 使用 Microsoft 符號伺服器來取得偵錯符號檔 目錄名稱或 URL。
標記 包含標記提供者的清單。 可能包含零個或多個 MarkerProvider 元素。
標記提供者 指定單一標記提供者。 必須包含下列元素:

- 層級
- GUID(全域唯一識別碼)
- 名稱

可以包含以下元素:

- 類別
- 已啟用
Level 設定 MarkerProvider 的重要性層級。 -低
-正常
-高
- 關鍵
- 一切
Guid ETW 標記提供者的全域唯一識別碼。 全球唯一識別碼 (GUID)
名稱 指定標記提供者的描述。 字串。
類別 指定為標記提供者所蒐集的類別。 以逗號分隔的數字字串或數字範圍。
已啟用 設定值,以決定是否啟用標記提供者以進行收集。 -真
-偽
過濾器配置 指定從集合篩選之 ETW 事件的組態選項清單。 可能包含以下元素:

- 收集Clr事件
- ClrCollection選項
- 收集範例事件
- 收集 GPU 活動
- 收集檔案IO
CollectClr事件 設定一個值,以決定是否收集 CLR 事件。 - 真
-偽
ClrCollection選項 指定是否要收集原生應用程式的 CLR 事件,以及是否要收集 NGEN 執行事件。 可能包含下列其中一個值、兩個值或不包含下列值:

- 收集原生
- 停用NGenRundown
收集範例事件 設定值,以決定是否收集範例事件。 - True
-偽
收集 GPU 事件 設定一個值,用於決定是否收集 DX 產生的事件。 - 真
-偽
收集檔案IO 設定值,以決定是否收集檔案 I/O 事件。 - 正確
-偽
使用者緩衝設定 指定使用者緩衝區設定參數的清單。 必須包含下列元素:

- 緩衝區沖洗計時器
- 緩衝區大小
- 最小緩衝
- 最大緩衝記憶體
核心緩衝設定 指定核心緩衝區設定參數的清單。 必須包含下列元素:

- 緩衝區沖洗計時器
- 緩衝區大小
- 最小緩衝區
- 最大緩衝區
緩衝區刷新計時器 指定 ETW 緩衝區的排清計時器。 正整數。
緩衝區大小 配置給每個事件追蹤會話緩衝區的記憶體數量,以 KB 為單位。 從 0 到 1024 的數字。
最小緩衝區 配置給事件追蹤階段作業之緩衝池的緩衝區數目下限。 大於或等於邏輯核心數目兩倍的正整數。
最大緩衝 分配給事件追蹤會話的緩衝池中的緩衝區數目上限。 大於或等於 MinimumBuffers 的數字。
JustMyCode 指定「僅限我的程式碼」目錄清單。 零個或多個 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>