並行視覺化檢視命令列公用程式 (CVCollectionCmd)
您可以使用並行視覺化檢視命令列公用程式 (CVCollectionCmd.exe) 從命令列收集追蹤,以便在 Visual Studio 的並行視覺化檢視中進行檢視。 此工具可在未安裝 Visual Studio 的電腦上使用。
注意
並行視覺化檢視是選擇性擴充功能。 (先前它包含在 Visual Studio 中。) 可以從下載中心下載 Visual Studio 並行視覺化檢視收集工具。
下載並行視覺化檢視命令列公用程式
若要下載及安裝此命令列公用程式,請移至 Visual Studio 並行視覺化檢視收集工具,並遵循指示進行。 根據預設,CVCollectionCmd.exe 會安裝在 %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools\ (x64 電腦上為 %ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\)。
使用 CVCollectionCmd 收集追蹤
您可以使用 CVCollectionCmd 啟動應用程式,或將 CVCollectionCmd 附加至應用程式,來收集追蹤。 請參閱下列與選項相關的命令參考。 例如:
<Path>CVCollectionCmd /launch c:\myapp\myapp.exe /outdir c:\myapp\data
命令與參數
若要取得命令列公用程式中命令和參數的說明,請在命令提示字元中輸入下列命令:
CvCollectionCmd /?
選項 | 描述 | 參數 | 傳回值 |
---|---|---|---|
Query | 傳回是否可以開始收集。 | 無 | 0,表示準備開始收集。 1,表示收集已在進行中。 2,表示收集不在進行中,但已啟用一或多個所需的 ETW 工作階段。 |
啟動 | 在並行視覺化檢視下執行指定的處理序。 | 可執行檔的路徑。 | 0,表示執行成功。 1,表示執行失敗,因為無法啟動目標應用程式。 13,表示執行失敗,因為 CVCollectionCmd 沒有足夠的權限可寫入指定的輸出目錄。 |
連結 | 開始收集系統範圍追蹤;如果指定處理序,則附加至該處理序。 | 無。 | 0,表示附加成功。 1,表示附加失敗,因為指定的處理序無效或模稜兩可。 13,表示附加失敗,因為 CVCollectionCmd 沒有足夠的權限可寫入指定的輸出目錄。 |
中斷連結 | 停止收集。 | 無。 | 0,表示中斷連結成功。 1,表示中斷連結失敗,因為目前正在收集。 2,表示中斷連結失敗,因為無法停止收集。 |
分析 | 分析指定的追蹤。 | CVTrace 檔案的完整路徑。 | 0,表示分析成功。 1,表示無法開始分析,因為指定的追蹤是系統範圍追蹤,但未指定目標處理序。 2,表示無法開始分析,因為追蹤不是系統範圍追蹤,但已指定處理序。 3,表示分析失敗,因為指定的處理序無效。 4,表示分析失敗,因為指定的 CVTrace 檔案無效。 |
LaunchArgs | 指定目標可執行檔引數。 這個選項僅適用於 Launch 命令。 | 傳遞給應用程式的命令列引數。 | 無。 |
Outdir | 指定要在其中儲存追蹤檔案的目錄。 適用於 Launch 和 Attach 命令。 | 目錄路徑或相對路徑。 | 無。 |
處理 | 指定執行 Attach 命令時要附加的處理序,或執行 Analyze 命令時要在追蹤中分析的處理序。 適用於 Attach 和 Analyze 命令。 | 處理序的 PID 或名稱。 | 無。 |
Config | 指定組態檔的路徑 (如果需要預設值以外的收集設定)。 適用於 Launch、Attach 和 Analyze 命令。 | XML 組態檔的目錄路徑或相對路徑。 | 無。 |
自訂組態設定
如果您使用 CVCollectionCmd 收集追蹤並想自訂收集設定,請使用組態檔指定這些設定。
注意
當您使用 Visual Studio 收集追蹤時,不要直接修改組態檔。 請改用 [進階設定] 對話方塊來修改設定。
若要修改收集設定,請在您要執行 CVCollectionCmd 公用程式的電腦上建立組態檔。 您可以從頭開始建立組態檔,也可以從已安裝 Visual Studio 的電腦上複製組態檔,再進行修改。 檔案名稱為 UserConfig.xml,並位在 Local AppData 資料夾中。 當您執行公用程式時,請搭配 Launch、Attach 或 Analyze 命令使用 Config 選項。 在與 Config 選項相關聯的參數中,指定組態檔的路徑。
組態檔標記
組態檔採用 XML 格式。 以下是有效的標記和值:
標記 | 描述 | 值 |
---|---|---|
Config | 標示整個組態檔。 | 必須包含下列項目: - MinorVersion - MajorVersion |
主要版本 | 指定組態檔的主要版本。 | 對於大多數 Visual Studio 專案,必須為 1。 如果不是 1,公用程式將無法運作。 |
MinorVersion | 指定組態檔的次要版本。 | 對於大多數 Visual Studio 專案,必須為 0。 如果不是 0,公用程式將無法運作。 |
IncludeEnvSymbolPath | 設定值,決定是否使用環境符號路徑 (_NT_SYMBOL_PATH)。 | - True - False |
DeleteEtlsAfterAnalysis | 設定值,決定是否在分析完成時刪除 ETL 檔案。 | - True - False |
DeleteEtlsAfterAnalysis | 指定符號伺服器的路徑。 如需詳細資訊,請參閱 使用 Microsoft 符號伺服器取得偵錯符號檔。 | 目錄名稱或 URL。 |
標記 | 包含標記提供者的清單。 | 可包含零個或多個 MarkerProvider 項目。 |
MarkerProvider | 指定單一標記提供者。 | 必須包含下列項目: - Level - GUID - 名稱 可包含下列項目: - Categories - IsEnabled |
層級 | 設定 MarkerProvider 的重要性層級。 | - Low - Normal - High - Critical - Everything |
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 | 指定 Just My Code 目錄的清單。 | 零個或多個 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>