Utilità della riga di comando del visualizzatore di concorrenza (CVCollectionCmd)
L'utilità della riga di comando del visualizzatore di concorrenza (CVCollectionCmd.exe) consente di raccogliere tracce dalla riga di comando in modo da poterle visualizzare nel visualizzatore di concorrenza per Visual Studio. Questi strumenti possono essere usati nei computer in cui non è installato Visual Studio.
Nota
Il visualizzatore di concorrenza è un'estensione facoltativa. In precedenza era stato incluso in Visual Studio. È possibile scaricare gli strumenti di raccolta del visualizzatore di concorrenza per Visual Studio dall'Area download.
Scaricare l'utilità della riga di comando del visualizzatore di concorrenza
Per scaricare e installare l'utilità della riga di comando, passare a Strumenti di raccolta del visualizzatore di concorrenza per Visual Studio e seguire le istruzioni. Per impostazione predefinita, CVCollectionCmd.exe è installato in %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools\ (%ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\ nei computer x64).
Raccogliere una traccia con CVCollectionCmd
È possibile raccogliere una traccia avviando l'app con CVCollectionCmd oppure tramite una connessione all'app. Per le opzioni disponibili, vedere i riferimenti ai comandi seguenti. Ad esempio:
<Path>CVCollectionCmd /launch c:\myapp\myapp.exe /outdir c:\myapp\data
Comandi e parametri
Per ottenere informazioni sui comandi e sui parametri nell'utilità da riga di comando, digitare quanto segue al prompt dei comandi:
CvCollectionCmd /?
Opzione | Descrizione | Parametri | Valori restituiti |
---|---|---|---|
Query | Indica se è possibile avviare la raccolta. | None | 0 se la raccolta è pronta per l'avvio. 1 se è già in corso una raccolta. 2 se non è in corso alcuna raccolta, ma sono già state abilitate una o più delle sessioni ETW necessarie. |
Launch | Esegue il processo specificato nel Visualizzatore di concorrenza. | Percorso del file eseguibile. | 0 se l'esecuzione è riuscita. 1 se l'esecuzione non è riuscita poiché non è stato possibile avviare l'applicazione di destinazione. 13 se l'esecuzione non è riuscita poiché CVCollectionCmd non ha autorizzazioni sufficienti per scrivere nella directory di output specificata. |
Collegamento | Inizia la raccolta di una traccia a livello di sistema. In caso contrario, si connette a un processo, se ne è stato specificato uno. | Nessuno. | 0 se la connessione è riuscita. 1 se la connessione non è riuscita poiché il processo specificato non è valido o è ambiguo. 13 se la connessione non è riuscita poiché CVCollectionCmd non ha autorizzazioni sufficienti per scrivere nella directory di output specificata. |
Detach | Arresta la raccolta. | Nessuno. | 0 se la disconnessione è riuscita. 1 se la disconnessione non è riuscita poiché la raccolta non è attualmente in corso. 2 se la disconnessione non è riuscita poiché non è stato possibile arrestarla. |
Analisi | Analizza la traccia specificata. | Percorso completo del file CVTrace. | 0 se l'analisi è riuscita. 1 se non è possibile avviare l'analisi poiché la traccia specificata è a livello di sistema, ma non è stato specificato alcun processo di destinazione. 2 se non è possibile avviare l'analisi poiché la traccia specificata non è a livello di sistema ed è stato specificato un processo. 3 se l'analisi non è riuscita poiché il processo specificato non è valido. 4 se l'analisi non è riuscita poiché il file CVTrace specificato non è valido. |
LaunchArgs | Specifica gli argomenti eseguibili di destinazione. Questa opzione è applicabile solo al comando Launch. | Argomenti da riga di comando per l'applicazione. | Nessuno. |
Outdir | Specifica la directory in cui salvare i file di traccia. Applicabile ai comandi Launch e Attach. | Percorso di directory o percorso relativo. | Nessuno. |
Processo | Specifica il processo a cui connettersi quando si esegue il comando Attach o il processo in una traccia da analizzare quando si esegue il comando Analyze. Applicabile ai comandi Attach e Analyze. | PID o nome del processo. | Nessuno. |
Config | Specifica il percorso del file di configurazione, se si vogliono impostazioni di raccolta diverse da quelle predefinite. Applicabile ai comandi Launch, Attach e Analyze. | Percorso di directory o percorso relativo del file di configurazione XML. | Nessuno. |
Personalizzare le impostazioni di configurazione
Se si usa CVCollectionCmd per raccogliere tracce e si vogliono personalizzare le impostazioni di raccolta, usare un file di configurazione per specificarle.
Nota
Quando si usa Visual Studio per raccogliere le tracce, è necessario non modificare direttamente il file di configurazione. Per modificare le impostazioni, usare invece la finestra di dialogo Impostazioni avanzate .
Per modificare le impostazioni di raccolta, creare un file di configurazione nella macchina in cui sarà eseguita l'utilità CVCollectionCmd. È possibile creare un file di configurazione completamente nuovo oppure copiare il file di configurazione disponibile nel computer in cui è installato Visual Studio e modificarlo. Il nome del file è UserConfig.xml e il file si trova nella cartella Local AppData. Quando si esegue l'utilità, usare l'opzione Config insieme al comando Launch, Attach o Analyze. Specificare il percorso del file di configurazione nel parametro associato all'opzione Config.
Tag del file di configurazione
Il file di configurazione è basato su XML. Di seguito sono riportati i tag e i valori validi:
Tag | Descrizione | Valori |
---|---|---|
Config | Delimita il file di configurazione complessivo. | Deve contenere gli elementi seguenti: - MinorVersion - MajorVersion |
Versione principale | Specifica la versione principale del file di configurazione. | Deve essere 1 per la maggior parte dei progetti di Visual Studio. Se è diverso da 1, l'utilità non funzionerà. |
MinorVersion | Specifica la versione secondaria del file di configurazione. | Deve essere 0 per la maggior parte dei progetti di Visual Studio. Se è diverso da 0, l'utilità non funzionerà. |
IncludeEnvSymbolPath | Imposta un valore che determina se è usato il percorso simboli di ambiente (_NT_SYMBOL_PATH). | - True - False |
DeleteEtlsAfterAnalysis | Imposta un valore che determina se i file ETL sono eliminati dopo il completamento dell'analisi. | - True - False |
SymbolPath | Specifica il percorso del server di simboli. Per altre informazioni, vedere Usare il server di simboli Microsoft per ottenere il file di simboli di debug. | Nome di directory o URL. |
Marcatori | Include l'elenco di provider marcatori. | Può includere zero o più elementi MarkerProvider. |
MarkerProvider | Specifica un singolo provider marcatori. | Deve contenere gli elementi seguenti: - Level - GUID - Nome Può includere questi elementi: - Categories - IsEnabled |
Livello | Imposta il livello di importanza di un MarkerProvider. | - Basso - Normale - Alto - Critico - Tutto |
GUID | Identificatore univoco globale del provider marcatori ETW. | Un valore GUID. |
Nome | Specifica la descrizione del provider marcatori. | Stringa . |
Categorie | Specifica le categorie raccolte per il provider marcatori. | Stringa delimitata da virgole che include numeri o intervalli di numeri. |
IsEnabled | Imposta un valore che determina se il provider marcatori è abilitato per la raccolta. | - True - False |
FilterConfig | Specifica l'elenco di opzioni di configurazione degli eventi ETW filtrati dalla raccolta. | Può includere gli elementi seguenti: - CollectClrEvents - ClrCollectionOptions - CollectSampleEvents - CollectGpuEvents - CollectFileIO |
CollectClrEvents | Imposta un valore che determina se gli eventi CLR sono raccolti. | - True - False |
ClrCollectionOptions | Specifica se raccogliere eventi CLR per app native e se raccogliere eventi di rundown NGEN. | Può includere uno, entrambi o nessuno dei valori seguenti: - CollectForNative - DisableNGenRundown |
CollectSampleEvents | Imposta un valore che determina se gli eventi campione sono raccolti. | - True - False |
CollectGpuEvents | Imposta un valore che determina se gli eventi generati da DX sono raccolti. | - True - False |
CollectFileIO | Imposta un valore che determina se gli eventi I/O su file sono raccolti. | - True - False |
UserBufferSettings | Specifica l'elenco di parametri per impostazioni di buffer utente. | Deve contenere gli elementi seguenti: - BufferFlushTimer - BufferSize - MinimumBuffers - MaximumBuffers |
KernelBufferSettings | Specifica l'elenco di parametri per impostazioni di buffer kernel. | Deve contenere gli elementi seguenti: - BufferFlushTimer - BufferSize - MinimumBuffers - MaximumBuffers |
BufferFlushTimer | Specifica il timer di cancellazione dei buffer ETW. | Numero intero positivo. |
BufferSize | Quantità di memoria allocata per ogni buffer di sessione di traccia di eventi, espressa in kilobyte. | Un numero compreso tra 0 e 1024. |
MinimumBuffers | Il numero minimo di buffer allocati per il pool di buffer della sessione di traccia degli eventi. | Un numero intero positivo maggiore di o uguale al doppio del numero di core logici. |
MaximumBuffers | Numero massimo di buffer allocati per il pool di buffer della sessione di traccia degli eventi. | Un numero maggiore di o uguale a MinimumBuffers. |
JustMyCode | Specifica l'elenco di directory Just My Code. | Un elenco di zero o più elementi MyCodeDirectory. |
MyCodeDirectory | Specifica una directory che include il codice dell'utente. | Un percorso assoluto. |
Esempio
Invece di creare un file di configurazione completamente nuovo, è possibile copiare l'esempio seguente e quindi modificarlo in base alle proprie esigenze.
<?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>