Udostępnij za pomocą


Narzędzie wiersza polecenia Concurrency Visualizer (CVCollectionCmd)

Możesz użyć narzędzia wiersza polecenia Concurrency Visualizer (CVCollectionCmd.exe), aby zbierać ślady z wiersza polecenia, aby można je było wyświetlić w wizualizatorze współbieżności dla programu Visual Studio. Narzędzia mogą być używane na komputerach, na których nie zainstalowano programu Visual Studio.

Uwaga / Notatka

Wizualizator współbieżności jest opcjonalnym rozszerzeniem. (Wcześniej była ona zawarta w programie Visual Studio). Narzędzia kolekcji Concurrency Visualizer dla programu Visual Studio można pobrać z Centrum pobierania.

Pobierz narzędzie wiersza polecenia Concurrency Visualizer

Aby pobrać i zainstalować narzędzie wiersza polecenia, przejdź do narzędzia Concurrency Visualizer Collection Tools for Visual Studio i postępuj zgodnie z instrukcjami. Domyślnie CVCollectionCmd.exe jest instalowana w %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools\ (%ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\ na komputerach x64).

Zbierz ślad za pomocą polecenia CVCollectionCmd

Możesz zebrać ślad, uruchamiając aplikację za pomocą cvCollectionCmd lub dołączając do niej. Aby zobaczyć dostępne opcje, zapoznaj się z poniższym zestawieniem poleceń. Na przykład

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

Polecenia i parametry

Aby uzyskać pomoc dotyczącą poleceń i parametrów w narzędziu wiersza polecenia, wpisz to w wierszu polecenia:

CvCollectionCmd /?

Option Description Parametry Wartości zwracane
Query Zwraca, czy można uruchomić kolekcję. Żaden 0, jeśli zbiór jest gotowy do uruchomienia.

1, jeśli kolekcja jest już w toku.

2, jeśli kolekcja nie jest w toku, ale co najmniej jedna z wymaganych sesji ETW jest już włączona.
Launch Uruchamia określony proces w ramach wizualizatora współbieżności. Ścieżka pliku wykonywalnego. 0, jeśli przebieg zakończył się pomyślnie.

1, jeśli uruchomienie nie powiodło się, ponieważ nie można uruchomić aplikacji docelowej.

13, jeśli uruchomienie nie powiodło się, ponieważ CVCollectionCmd ma niewystarczające uprawnienia do zapisu w określonym katalogu wyjściowym.
Dołączyć Rozpoczyna zbieranie śladu całego systemu; w przeciwnym razie dołącza się do procesu, jeśli został określony. Żaden. 0, jeśli załącznik zakończył się pomyślnie.

1, jeśli załącznik nie powiódł się, ponieważ określony proces jest nieprawidłowy lub niejednoznaczny.

13, jeśli załącznik nie powiódł się, ponieważ CVCollectionCmd ma niewystarczające uprawnienia do zapisu w określonym katalogu wyjściowym.
Detach Zatrzymuje kolekcjonowanie. Żaden. 0, jeśli odłączenie zakończyło się pomyślnie.

1, jeśli odłączenie nie powiodło się, ponieważ zbieranie danych nie jest obecnie przeprowadzane.

2, jeśli odłączenie nie powiodło się, ponieważ nie można zatrzymać zbierania danych.
Analiza Analizuje określony ślad. Pełna ścieżka pliku CVTrace. 0, jeśli analiza zakończyła się pomyślnie.

1 jeśli nie można uruchomić analizy, ponieważ określony ślad był w całym systemie, ale nie określono żadnego procesu docelowego.

2 jeśli nie można uruchomić analizy, ponieważ śledzenie nie było w całym systemie i określono proces.

3 jeśli analiza nie powiodła się, ponieważ określony proces jest nieprawidłowy.

4 jeśli analiza nie powiodła się, ponieważ określony plik CVTrace jest nieprawidłowy.
LaunchArgs Określa docelowe argumenty wykonywalne. Ta opcja dotyczy tylko polecenia Uruchom. Argumenty wiersza polecenia dla aplikacji. Żaden.
Outdir Określa katalog, w którym mają być zapisywane pliki śledzenia. Dotyczy poleceń Uruchamiania i Podłączania. Ścieżka katalogu lub ścieżka względna. Żaden.
Proces Określa proces, do którego należy dołączyć, gdy wykonywane jest polecenie Dołączanie, lub proces w ścieżce, który należy przeanalizować po wykonaniu polecenia Analizuj. Dotyczy poleceń Dołącz i Analizuj. Identyfikator PID lub nazwa procesu. Żaden.
Config Określa ścieżkę pliku konfiguracji, jeśli chcesz ustawić ustawienia kolekcji inne niż domyślne. Dotyczy poleceń Uruchamiania, Dołączania i Analizowania. Ścieżka katalogu lub ścieżka względna pliku konfiguracji XML. Żaden.

Dostosowywanie ustawień konfiguracji

Jeśli używasz cvCollectionCmd do zbierania śladów i chcesz dostosować ustawienia kolekcji, użyj pliku konfiguracji, aby je określić.

Uwaga / Notatka

W przypadku zbierania śladów przy użyciu programu Visual Studio nie należy bezpośrednio modyfikować pliku konfiguracji. Zamiast tego użyj okna dialogowego Ustawienia zaawansowane , aby zmodyfikować ustawienia.

Aby zmodyfikować ustawienia kolekcji, utwórz plik konfiguracji na maszynie, na której zostanie uruchomione narzędzie CVCollectionCmd. Możesz utworzyć plik konfiguracji od podstaw lub skopiować plik konfiguracji na komputerze z zainstalowanym programem Visual Studio i zmodyfikować go. Plik ma nazwę UserConfig.xml i znajduje się w folderze Local AppData . Po uruchomieniu narzędzia użyj opcji Config w połączeniu z poleceniem Uruchom, Dołącz lub Analizuj. W parametrze skojarzonym z opcją Config określ ścieżkę pliku konfiguracji.

Tagi plików konfiguracji

Plik konfiguracji jest oparty na formacie XML. Oto prawidłowe tagi i wartości:

Tag Description Wartości
Config Określa ogólny plik konfiguracyjny. Musi zawierać następujące elementy:

- Wersja pomocnicza
- MajorVersion
Wersja główna Określa wersję główną pliku konfiguracji. Musi być 1 dla większości projektów programu Visual Studio. Jeśli nie ma wartości 1, narzędzie nie będzie działać.
Wersja pomocnicza Określa wersję podrzędną pliku konfiguracji. Musi być 0 dla większości projektów programu Visual Studio. Jeśli nie ma wartości 0, narzędzie nie będzie działać.
IncludeEnvSymbolPath Ustawia wartość, która decyduje, czy ścieżka symbolu środowiska (_NT_SYMBOL_PATH) jest używana. -Prawdziwy
-Fałszywy
UsuńEtlsPoAnalizie Ustawia wartość określającą, czy pliki ETL są usuwane po zakończeniu analizy. -Prawdziwy
-Fałszywy
SymbolPath Określa ścieżkę serwera symboli. Aby uzyskać więcej informacji, zobacz Uzyskiwanie plików symboli debugowania za pomocą programu Microsoft Symbol Server. Nazwa katalogu lub adres URL.
Znaczniki Zawiera listę dostawców znaczników. Może zawierać zero lub więcej elementów MarkerProvider.
MarkerProvider Określa pojedynczego dostawcę znacznika. Musi zawierać następujące elementy:

- Poziom
- GUID (Globalny Unikalny Identyfikator)
- Nazwa

Może zawierać następujące elementy:

-Kategorie
- IsEnabled
Level Ustawia poziom ważności dla MarkerProvider. -Niski
-Normalny
-Wysoki
-Krytyczny
-Wszystko
Przewodnik Globalnie unikalny identyfikator dostawcy znacznika ETW. Identyfikator GUID.
Name Określa opis dostawcy znaczników. Ciąg.
Kategorie Określa kategorie zebrane dla dostawcy znaczników. Rozdzielany przecinkami ciąg liczb lub zakresów liczb.
JestWłączony Ustawia wartość określającą, czy dostawca znacznika jest włączony do zbioru danych. -Prawdziwy
-Fałszywy
FilterConfig Określa listę opcji konfiguracji zdarzeń ETW, które są filtrowane z kolekcji. Może zawierać następujące elementy:

- CollectClrEvents
- ClrCollectionOptions
- CollectSampleEvents
- CollectGpuEvents
- CollectFileIO
CollectClrEvents Ustaw wartość, która określa, czy zdarzenia CLR są zbierane. -Prawdziwy
-Fałszywy
ClrCollectionOptions Określa, czy zbierać zdarzenia CLR dla aplikacji natywnych oraz czy rejestrować zdarzenia NGEN typu rundown. Może zawierać jedną lub żadną z tych wartości:

- CollectForNative
- DisableNGenRundown
CollectSampleEvents Ustawia wartość określającą, czy są zbierane przykładowe zdarzenia. -Prawdziwy
-Fałszywy
CollectGpuEvents Ustawia wartość określającą, czy zdarzenia generowane przez DX są zbierane. -Prawdziwy
-Fałszywy
CollectFileIO Ustawia wartość określającą, czy zbierać zdarzenia wejścia/wyjścia pliku. -Prawdziwy
-Fałszywy
UstawieniaBuferaUżytkownika Określa listę parametrów ustawień buforu użytkownika. Musi zawierać następujące elementy:

- BufferFlushTimer
- RozmiarBufora
- MinimumBuffers
- MaximumBuffers
Ustawienia Bufora Jądra Określa listę parametrów ustawień buforu jądra. Musi zawierać następujące elementy:

- BufferFlushTimer
- Rozmiar Buforu
- MinimumBuffers
- MaximumBuffers
BufferFlushTimer Określa licznik opróżniania buforów ETW. Dodatnia liczba całkowita.
RozmiarBufera Ilość pamięci przydzielonej dla każdego buforu sesji śledzenia zdarzeń w kilobajtach. Liczba z zakresu od 0 do 1024.
MinimumBuffers Minimalna liczba buforów, które są przydzielone dla puli buforów sesji śledzenia zdarzeń. Dodatnia liczba całkowita większa lub równa dwukrotnie liczbie rdzeni logicznych.
Maksymalna liczba buforów Maksymalna liczba buforów, które są przydzielane do puli buforów sesji śledzenia zdarzeń. Liczba większa lub równa MinimumBuffers.
JustMyCode Określa listę katalogów Just My Code. Lista zera lub większej liczby elementów MyCodeDirectory.
MyCodeDirectory Określa katalog zawierający kod. Ścieżka bezwzględna.

Example

Zamiast tworzyć plik konfiguracji od początku, możesz skopiować poniższy przykład, a następnie zmodyfikować go w celu spełnienia wymagań.

<?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>