您可以使用並行視覺化工具命令列公用程式 (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>