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

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 plik CVCollectionCmd.exe jest zainstalowany w folderze %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools\ (%ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\ na komputerach x64.

Zbieranie śladu za pomocą klasy CVCollectionCmd

Możesz zebrać ślad, uruchamiając aplikację za pomocą cvCollectionCmd lub dołączając do niej. Aby uzyskać opcje, zapoznaj się z poniższymi odwołaniami do 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 /?

Opcja Opis Parametry Wartości zwracane
Query Zwraca, czy można uruchomić kolekcję. Brak 0, jeśli kolekcja jest gotowa 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łącz Rozpoczyna zbieranie śladu całego systemu; w przeciwnym razie dołącza się do procesu, jeśli został określony. Brak. 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.
Odłącz Zatrzymuje zbieranie. Brak. 0, jeśli odłączenie zakończyło się pomyślnie.

1, jeśli odłączenie nie powiodło się, ponieważ kolekcja nie jest obecnie w toku.

2, jeśli odłączenie nie powiodło się, ponieważ nie można zatrzymać kolekcji.
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 całego systemu i został określony 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. Brak.
Outdir Określa katalog, w którym mają być zapisywane pliki śledzenia. Dotyczy poleceń Uruchamiania i dołączania. Ścieżka katalogu lub ścieżka względna. Brak.
Przetwarzaj Określa proces dołączania do podczas wykonywania polecenia Dołączanie lub proces w śladzie do analizy po wykonaniu polecenia Analizuj. Dotyczy poleceń Dołączanie i analizowanie. Identyfikator PID lub nazwa procesu. Brak.
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. Brak.

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

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 Zaawansowane Ustawienia, 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:

Tagowy opis Wartości
Config Demarcates ogólny plik konfiguracji. 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ę pomocniczą 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ść określającą, czy używana jest ścieżka symbolu środowiska (_NT_SYMBOL_PATH). -True
-False
DeleteEtlsAfterAnalysis Ustawia wartość określającą, czy pliki ETL są usuwane po zakończeniu analizy. -True
-False
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
-IDENTYFIKATOR GUID
-Nazwa

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

-Kategorie
-Isenabled
Poziom Ustawia poziom ważności obiektu MarkerProvider. -Niskie
-Normalne
-Wysokiej
- Critical (Krytyczny)
-Wszystko
Identyfikator GUID Globalnie unikatowy identyfikator dostawcy znacznika ETW. Identyfikator GUID.
Nazwisko 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.
IsEnabled Ustawia wartość określającą, czy dostawca znacznika jest włączony dla kolekcji. -True
-False
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ść określającą, czy są zbierane zdarzenia CLR. -True
-False
ClrCollectionOptions Określa, czy należy zbierać zdarzenia CLR dla aplikacji natywnych i czy zbierać zdarzenia rundown NGEN. Może zawierać jedną lub żadną z tych wartości:

- CollectForNative
- DisableNGenRundown
CollectSampleEvents Ustawia wartość określającą, czy są zbierane przykładowe zdarzenia. -True
-False
CollectGpuEvents Ustawia wartość określającą, czy zdarzenia generowane przez DX są zbierane. -True
-False
CollectFileIO Ustawia wartość określającą, czy są zbierane zdarzenia we/wy pliku. -True
-False
UserBuffer Ustawienia Określa listę parametrów ustawień buforu użytkownika. Musi zawierać następujące elementy:

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

- BufferFlushTimer
-Buffersize
- MinimumBuffers
- MaximumBuffers
BufferFlushTimer Określa czasomierz opróżniania buforów ETW. Dodatnia liczba całkowita.
Buffersize 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 przydzielonych dla puli buforów sesji śledzenia zdarzeń. Dodatnia liczba całkowita większa lub równa dwukrotnie liczbie rdzeni logicznych.
Maksymalna wartośćbuffers Maksymalna liczba buforów przydzielonych dla puli buforów sesji śledzenia zdarzeń. Liczba większa lub równa wartości 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.

Przykład

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>