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>