Udostępnij za pośrednictwem


dotnet-trace performance analysis utility (narzędzie do analizy wydajności dotnet-trace)

Ten artykuł dotyczy: ✔️ dotnet-trace 3.0.47001 i nowszych wersji

Instalowanie

Istnieją dwa sposoby pobierania i instalowania dotnet-traceprogramu :

Streszczenie

dotnet-trace [-h, --help] [--version] <command>

opis

Narzędzie dotnet-trace :

  • To międzyplatformowe narzędzie .NET Core.
  • Umożliwia zbieranie śladów platformy .NET Core działającego procesu bez natywnego profilera.
  • Jest oparty na EventPipe środowisku uruchomieniowym platformy .NET Core.
  • Zapewnia to samo środowisko w systemach Windows, Linux lub macOS.

Opcje

  • -h|--help

    Pokazuje pomoc wiersza polecenia.

  • --version

    Wyświetla wersję narzędzia dotnet-trace.

  • --duration

    Jak długo należy uruchomić ślad. --duration 00:00:00:05 uruchomi go przez 5 sekund.

Polecenia

Polecenie
dotnet-trace collect
dotnet-trace convert
dotnet-trace ps
dotnet-trace list-profiles
dotnet-trace report

dotnet-trace collect

Zbiera ślad diagnostyczny z uruchomionego procesu lub uruchamia proces podrzędny i śledzi go (.NET 5 lub nowszy). Aby narzędzie uruchamiało proces podrzędny i śledziło go z jego uruchamiania, dołącz -- go do polecenia collect.

Streszczenie

dotnet-trace collect [--buffersize <size>] [--clreventlevel <clreventlevel>] [--clrevents <clrevents>]
    [--format <Chromium|NetTrace|Speedscope>] [-h|--help] [--duration dd:hh:mm:ss]
    [-n, --name <name>] [--diagnostic-port] [-o|--output <trace-file-path>] [-p|--process-id <pid>]
    [--profile <profile-name>] [--providers <list-of-comma-separated-providers>]
    [-- <command>] (for target applications running .NET 5 or later)
    [--show-child-io] [--resume-runtime]
    [--stopping-event-provider-name <stoppingEventProviderName>]
    [--stopping-event-event-name <stoppingEventEventName>]
    [--stopping-event-payload-filter <stoppingEventPayloadFilter>]

Opcje

  • --buffersize <size>

    Ustawia rozmiar buforu w pamięci w megabajtach. Domyślnie 256 MB.

    Uwaga

    Jeśli proces docelowy emituje zdarzenia szybciej niż można je zapisać na dysku, ten bufor może przepełnić się i niektóre zdarzenia zostaną porzucone. Ten problem można rozwiązać, zwiększając rozmiar buforu lub zmniejszając liczbę rejestrowanych zdarzeń.

  • --clreventlevel <clreventlevel>

    Szczegółowość zdarzeń CLR, które mają być emitowane. W poniższej tabeli przedstawiono dostępne poziomy zdarzeń.

    Wartość ciągu Wartość liczbowa
    logalways 0
    critical 1
    error 2
    warning 3
    informational 4
    verbose 5
  • --clrevents <clrevents>

    Lista słów kluczowych dostawcy środowiska uruchomieniowego CLR w celu włączenia rozdzielonych znakami + . Jest to proste mapowanie, które umożliwia określenie słów kluczowych zdarzeń za pośrednictwem aliasów ciągów, a nie ich wartości szesnastkowych. Na przykład dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:3:4 żąda tego samego zestawu zdarzeń co dotnet-trace collect --clrevents gc+gchandle --clreventlevel informational. W poniższej tabeli przedstawiono listę dostępnych słów kluczowych:

    Alias ciągu słowa kluczowego Wartość szesnastkowy słowa kluczowego
    gc 0x1
    gchandle 0x2
    fusion 0x4
    loader 0x8
    jit 0x10
    ngen 0x20
    startenumeration 0x40
    endenumeration 0x80
    security 0x400
    appdomainresourcemanagement 0x800
    jittracing 0x1000
    interop 0x2000
    contention 0x4000
    exception 0x8000
    threading 0x10000
    jittedmethodiltonativemap 0x20000
    overrideandsuppressngenevents 0x40000
    type 0x80000
    gcheapdump 0x100000
    gcsampledobjectallocationhigh 0x200000
    gcheapsurvivalandmovement 0x400000
    gcheapcollect 0x800000
    gcheapandtypenames 0x1000000
    gcsampledobjectallocationlow 0x2000000
    perftrack 0x20000000
    stack 0x40000000
    threadtransfer 0x80000000
    debugger 0x100000000
    monitoring 0x200000000
    codesymbols 0x400000000
    eventsource 0x800000000
    compilation 0x1000000000
    compilationdiagnostic 0x2000000000
    methoddiagnostic 0x4000000000
    typediagnostic 0x8000000000

    Więcej szczegółowych informacji na temat dostawcy CLR można uzyskać w dokumentacji referencyjnej dostawcy środowiska uruchomieniowego platformy .NET.

  • --format {Chromium|NetTrace|Speedscope}

    Ustawia format danych wyjściowych konwersji pliku śledzenia. Wartość domyślna to NetTrace.

  • -n, --name <name>

    Nazwa procesu do zbierania śladu.

  • --diagnostic-port <path-to-port>

    Nazwa portu diagnostycznego do utworzenia. Zobacz Używanie portu diagnostycznego do zbierania śladu z uruchamiania aplikacji, aby dowiedzieć się, jak używać tej opcji do zbierania śladu po uruchomieniu aplikacji.

  • --duration <time-to-run>

    Czas uruchomienia śledzenia. dd:hh:mm:ss Użyj formatu. Na przykład 00:00:00:05 uruchomi go przez 5 sekund.

  • -o|--output <trace-file-path>

    Ścieżka wyjściowa dla zebranych danych śledzenia. Jeśli nie zostanie określona, zostanie ustawiona wartość <appname>_<yyyyMMdd>_<HHmmss>.nettracedomyślna , np. "myapp_20210315_111514.nettrace".

  • -p|--process-id <PID>

    Identyfikator procesu do zbierania śladu.

  • --profile <profile-name>

    Nazwany wstępnie zdefiniowany zestaw konfiguracji dostawcy, który umożliwia zwięzłe określenie typowych scenariuszy śledzenia. Dostępne są następujące profile:

Profil opis
cpu-sampling Przydatne do śledzenia użycia procesora CPU i ogólnych informacji o środowisku uruchomieniowym platformy .NET. Jest to opcja domyślna, jeśli nie określono żadnego profilu lub dostawców.
gc-verbose Śledzi kolekcje GC i przykłady alokacji obiektów.
gc-collect Śledzi kolekcje GC tylko przy bardzo niskim narzucie.
  • --providers <list-of-comma-separated-providers>

    Rozdzielona przecinkami lista EventPipe dostawców do włączenia. Ci dostawcy uzupełniają wszystkich dostawców sugerowanych przez --profile <profile-name>usługę . Jeśli istnieje niespójność dla określonego dostawcy, ta konfiguracja ma pierwszeństwo przed niejawną konfiguracją z profilu.

    Ta lista dostawców ma postać:

    • Provider[,Provider]
    • Provider ma postać: KnownProviderName[:Flags[:Level][:KeyValueArgs]].
    • KeyValueArgs ma postać: [key1=value1][;key2=value2].

    Aby dowiedzieć się więcej na temat niektórych znanych dostawców na platformie .NET, zapoznaj się z tematem Dobrze znani dostawcy zdarzeń.

  • -- <command> (dla aplikacji docelowych z systemem .NET 5 lub nowszym)

    Po parametrach konfiguracji kolekcji użytkownik może dołączyć -- następujące polecenie, aby uruchomić aplikację platformy .NET z co najmniej środowiskiem uruchomieniowym 5.0. Może to być przydatne podczas diagnozowania problemów występujących na wczesnym etapie procesu, takich jak problem z wydajnością uruchamiania lub błędy modułu ładującego zestawów i binder.

    Uwaga

    Użycie tej opcji monitoruje pierwszy proces platformy .NET, który komunikuje się z powrotem do narzędzia, co oznacza, że jeśli polecenie uruchamia wiele aplikacji platformy .NET, będzie zbierać tylko pierwszą aplikację. W związku z tym zaleca się użycie tej opcji w aplikacjach samodzielnie lub przy użyciu dotnet exec <app.dll> opcji .

  • --show-child-io

    Przedstawia strumienie wejściowe i wyjściowe uruchomionego procesu podrzędnego w bieżącej konsoli.

  • --resume-runtime

    Wznów środowisko uruchomieniowe po zainicjowaniu sesji, domyślnie ma wartość true. Wyłącz wznawianie środowiska uruchomieniowego przy użyciu polecenia --resume-runtime:false.

  • --stopping-event-provider-name

    Ciąg, analizowany tak, jak to jest, który zatrzyma śledzenie po osiągnięciu zdarzenia z zgodną nazwą dostawcy. W przypadku bardziej szczegółowego zdarzenia zatrzymania podaj i --stopping-event-event-name /lub --stopping-event-payload-filter. np. --stopping-event-provider-name Microsoft-Windows-DotNETRuntime zatrzymać śledzenie po osiągnięciu pierwszego zdarzenia emitowanego przez dostawcę zdarzeń Microsoft-Windows-DotNETRuntime .

  • --stopping-event-event-name

    Ciąg, analizowany w stanie takim, w jakim jest, spowoduje zatrzymanie śledzenia po osiągnięciu zdarzenia z pasującą nazwą zdarzenia. Wymaga --stopping-event-provider-name ustawienia. Aby uzyskać bardziej szczegółowe zdarzenie zatrzymania, dodatkowo podaj wartość --stopping-event-payload-filter. np. --stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarted zatrzymać śledzenie po osiągnięciu pierwszego Method/JittingStarted zdarzenia emitowanego przez dostawcę zdarzeń Microsoft-Windows-DotNETRuntime .

  • --stopping-event-payload-filter

    Ciąg, analizowany jako [payload_field_name]:[payload_field_value] par oddzielone przecinkami, które zatrzymają śledzenie po osiągnięciu zdarzenia zawierającego wszystkie określone pary ładunków. Wymaga --stopping-event-provider-name i --stopping-event-event-name należy ustawić. Np. --stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarted --stopping-event-payload-filter MethodNameSpace:Program,MethodName:OnButtonClick zatrzymać śledzenie po pierwszym Method/JittingStarted zdarzeniu metody OnButtonClick w Program przestrzeni nazw emitowanych przez dostawcę Microsoft-Windows-DotNETRuntime zdarzeń.

Uwaga

  • Zatrzymanie śledzenia może potrwać długo (do minut) w przypadku dużych aplikacji. Środowisko uruchomieniowe musi wysłać pamięć podręczną typu dla całego kodu zarządzanego przechwyconego w śladzie.
  • W systemach Linux i macOS to polecenie oczekuje aplikacji docelowej i dotnet-trace będzie współużytkować tę samą TMPDIR zmienną środowiskową. W przeciwnym razie upłynął limit czasu polecenia.
  • Aby zebrać dane śledzenia przy użyciu polecenia dotnet-trace, należy uruchomić go jako ten sam użytkownik, co użytkownik, który uruchamia proces docelowy lub jako główny. W przeciwnym razie narzędzie nie może nawiązać połączenia z procesem docelowym.
  • Jeśli podczas uruchamiania dotnet-trace collectwystąpi nieobsługiwany wyjątek , spowoduje to niekompletne śledzenie. Jeśli znalezienie głównej przyczyny wyjątku jest twoim priorytetem, przejdź do sekcji Zbieranie zrzutów w przypadku awarii. W wyniku nieobsługiwanego wyjątku ślad jest obcięty, gdy środowisko uruchomieniowe zostanie zamknięte, aby zapobiec inne niepożądanemu zachowaniu, takie jak zawieszenie lub uszkodzenie danych. Mimo że ślad jest niekompletny, nadal można go otworzyć, aby zobaczyć, co się stało, co doprowadziło do awarii. Jednak brakuje informacji rundown (dzieje się to na końcu śledzenia), więc stosy mogą być nierozwiązane (w zależności od tego, którzy dostawcy zostali włączeni). Otwórz ślad, wykonując narzędzie PerfView z flagą /ContinueOnError w wierszu polecenia. Dzienniki będą również zawierać lokalizację, w ramach którego został wyzwolony wyjątek.
  • Podczas określania zdarzenia zatrzymania za pośrednictwem --stopping-event-* opcji, ponieważ strumień zdarzeń jest analizowany asynchronicznie, między czasem zdarzenie śledzenia zgodne z określonymi opcjami zdarzenia zatrzymania jest analizowane, a zdarzenie EventPipeSession zostanie zatrzymane.

dotnet-trace convert

Konwertuje nettrace ślady na alternatywne formaty do użycia z alternatywnymi narzędziami do analizy śledzenia.

Streszczenie

dotnet-trace convert [<input-filename>] [--format <Chromium|NetTrace|Speedscope>] [-h|--help] [-o|--output <output-filename>]

Argumenty

  • <input-filename>

    Plik śledzenia danych wejściowych do przekonwertowania. Wartość domyślna to trace.nettrace.

Opcje

  • --format <Chromium|NetTrace|Speedscope>

    Ustawia format danych wyjściowych konwersji pliku śledzenia.

  • -o|--output <output-filename>

    Nazwa pliku wyjściowego. Zostanie dodane rozszerzenie formatu docelowego.

Uwaga

Konwertowanie nettrace plików na chromium pliki lub speedscope jest nieodwracalne. speedscope pliki i chromium nie mają wszystkich informacji niezbędnych do odtworzenia nettrace plików. convert Jednak polecenie zachowuje oryginalny nettrace plik, więc nie usuwaj tego pliku, jeśli planujesz go otworzyć w przyszłości.

dotnet-trace ps

Wyświetla listę procesów dotnet, z których można zbierać ślady. dotnet-trace 6.0.320703 i nowsze, wyświetla również argumenty wiersza polecenia, z którymi uruchomiono każdy proces, jeśli jest dostępny.

Uwaga

Aby uzyskać pełne informacje na temat wyliczanych procesów 64-bitowych, należy użyć 64-bitowej wersji dotnet-trace narzędzia.

Streszczenie

dotnet-trace ps [-h|--help]

Przykład

Załóżmy, że uruchamiasz długotrwałą aplikację przy użyciu polecenia dotnet run --configuration Release. W innym oknie uruchomisz dotnet-trace ps polecenie . Dane wyjściowe, które zobaczysz, są następujące. Argumenty wiersza polecenia, jeśli są dostępne, są wyświetlane w dotnet-trace wersji 6.0.320703 lub nowszej.

> dotnet-trace ps
  
  21932 dotnet     C:\Program Files\dotnet\dotnet.exe   run --configuration Release
  36656 dotnet     C:\Program Files\dotnet\dotnet.exe

dotnet-trace list-profiles

Wyświetla listę wstępnie utworzonych profilów śledzenia z opisem dostawców i filtrów w każdym profilu.

Streszczenie

dotnet-trace list-profiles [-h|--help]

dotnet-trace report

Tworzy raport na podstawie wcześniej wygenerowanego śladu.

Streszczenie

dotnet-trace report [-h|--help] <tracefile> [command]

Argumenty

  • <tracefile>

    Ścieżka pliku do analizowanego śledzenia.

Polecenia

dotnet-trace report topN

Znajduje n najlepszych metod, które były na stosie wywołań najdłużej.

Streszczenie
dotnet-trace report <tracefile> topN [-n|--number <n>] [--inclusive] [-v|--verbose] [-h|--help]
Opcje
  • -n|--number <n>

Udostępnia n najlepszych metod na stosie wywołań.

  • --inclusive

Wyprowadź pierwsze N metod na podstawie czasu inkluzywnego . Jeśli nie zostanie określony, czas wyłączny jest używany domyślnie.

  • -v|--verbose

Wyprowadź pełne parametry każdej metody. Jeśli nie zostanie określony, parametry zostaną obcięte.

Zbieranie śladu za pomocą polecenia dotnet-trace

Aby zebrać ślady przy użyciu polecenia dotnet-trace:

  • Pobierz identyfikator procesu (PID) aplikacji .NET Core w celu zbierania śladów.

    • W systemie Windows można użyć Menedżera zadań lub tasklist polecenia, na przykład.
    • Na przykład ps w systemie Linux polecenie .
    • dotnet-trace ps
  • Uruchom następujące polecenie:

    dotnet-trace collect --process-id <PID>
    

    Poprzednie polecenie generuje dane wyjściowe podobne do następujących:

    Press <Enter> to exit...
    Connecting to process: <Full-Path-To-Process-Being-Profiled>/dotnet.exe
    Collecting to file: <Full-Path-To-Trace>/trace.nettrace
    Session Id: <SessionId>
    Recording trace 721.025 (KB)
    
  • Zatrzymaj zbieranie, naciskając <Enter> . dotnet-trace spowoduje zakończenie rejestrowania zdarzeń do pliku trace.nettrace .

Uruchamianie aplikacji podrzędnej i zbieranie śladu z jego uruchamiania przy użyciu polecenia dotnet-trace

Czasami przydatne może być zebranie śladu procesu od jego uruchomienia. W przypadku aplikacji z systemem .NET 5 lub nowszym można to zrobić przy użyciu polecenia dotnet-trace.

Spowoduje to uruchomienie hello.exe arg1 polecenia i arg2 jako argumentów wiersza polecenia i zebranie śladu z uruchomienia środowiska uruchomieniowego:

dotnet-trace collect -- hello.exe arg1 arg2

Poprzednie polecenie generuje dane wyjściowe podobne do następujących:

No profile or providers specified, defaulting to trace profile 'cpu-sampling'

Provider Name                           Keywords            Level               Enabled By
Microsoft-DotNETCore-SampleProfiler     0x0000F00000000000  Informational(4)    --profile
Microsoft-Windows-DotNETRuntime         0x00000014C14FCCBD  Informational(4)    --profile

Process        : E:\temp\gcperfsim\bin\Debug\net5.0\gcperfsim.exe
Output File    : E:\temp\gcperfsim\trace.nettrace


[00:00:00:05]   Recording trace 122.244  (KB)
Press <Enter> or <Ctrl+C> to exit...

Zbieranie śladu można zatrzymać, naciskając <Enter> lub <Ctrl + C> . Spowoduje to również zakończenie hello.exedziałania .

Uwaga

hello.exe Uruchomienie za pomocą polecenia dotnet-trace spowoduje przekierowanie jego danych wejściowych/wyjściowych i domyślnie nie będzie można z nią korzystać w konsoli. Użyj przełącznika, aby wchodzić w interakcję --show-child-io z elementem stdin/stdout. Zamknięcie narzędzia za pomocą CTRL+C lub SIGTERM bezpiecznie zakończy zarówno narzędzie, jak i proces podrzędny. Jeśli proces podrzędny zakończy się przed narzędziem, narzędzie zakończy działanie, a ślad powinien być bezpiecznie wyświetlany.

Używanie portu diagnostycznego do zbierania śladu z uruchamiania aplikacji

Port diagnostyczny to funkcja środowiska uruchomieniowego dodana na platformie .NET 5, która umożliwia rozpoczęcie śledzenia od uruchamiania aplikacji. Aby to zrobić, dotnet-tracemożesz użyć metody zgodnie z dotnet-trace collect -- <command> opisem w powyższych przykładach lub użyć --diagnostic-port opcji .

Użycie dotnet-trace <collect|monitor> -- <command> polecenia w celu uruchomienia aplikacji jako procesu podrzędnego jest najprostszym sposobem szybkiego śledzenia aplikacji od jej uruchomienia.

Jeśli jednak chcesz uzyskać dokładnszą kontrolę nad okresem istnienia śledzonej aplikacji (na przykład monitorować aplikację tylko przez pierwsze 10 minut i kontynuować wykonywanie) lub jeśli musisz wchodzić w interakcję z aplikacją przy użyciu interfejsu wiersza polecenia, za pomocą --diagnostic-port opcji możesz kontrolować zarówno monitorowaną aplikację docelową, jak i dotnet-trace.

  1. Poniższe polecenie powoduje dotnet-trace utworzenie gniazda diagnostycznego o nazwie myport.sock i oczekiwanie na połączenie.

    dotnet-trace collect --diagnostic-port myport.sock
    

    Wyjście:

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
    
  2. W oddzielnej konsoli uruchom aplikację docelową ze zmienną środowiskową DOTNET_DiagnosticPorts ustawioną na wartość w danych wyjściowych dotnet-trace .

    export DOTNET_DiagnosticPorts=/home/user/myport.sock
    ./my-dotnet-app arg1 arg2
    

    Powinno to następnie umożliwić dotnet-trace rozpoczęcie śledzenia my-dotnet-app:

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=myport.sock
    Starting a counter session. Press Q to quit.
    

    Ważne

    Uruchomienie aplikacji dotnet run za pomocą polecenia może być problematyczne, ponieważ interfejs wiersza polecenia dotnet może zduplikować wiele procesów podrzędnych, które nie są Twoją aplikacją, i mogą łączyć się z dotnet-trace nią przed aplikacją, pozostawiając aplikację do zawieszenia w czasie wykonywania. Zaleca się bezpośrednie użycie samodzielnej wersji aplikacji lub użycie dotnet exec jej do uruchamiania aplikacji.

Wyświetlanie śladu przechwyconego z pliku dotnet-trace

W systemie Windows można wyświetlać pliki .nettrace w programie Visual Studio lub PerfView na potrzeby analizy.

W systemie Linux możesz wyświetlić ślad, zmieniając format danych wyjściowych dotnet-trace na speedscope. Zmień format pliku wyjściowego -f|--format przy użyciu opcji . Możesz wybrać między nettrace (opcją domyślną) i speedscope. Opcja -f speedscope spowoduje dotnet-trace utworzenie speedscope pliku. Speedscope pliki można otwierać pod adresem https://www.speedscope.app.

W przypadku śladów zebranych na platformach innych niż Windows można również przenieść plik śledzenia na maszynę z systemem Windows i wyświetlić go w programie Visual Studio lub PerfView.

Uwaga

Środowisko uruchomieniowe platformy .NET Core generuje ślady w nettrace formacie . Ślady są konwertowane na speedscope (jeśli określono) po zakończeniu śledzenia. Ponieważ niektóre konwersje mogą spowodować utratę danych, oryginalny nettrace plik jest zachowywany obok przekonwertowanego pliku.

Użyj pliku rsp, aby uniknąć wpisywania długich poleceń

Możesz uruchomić dotnet-trace plik .rsp zawierający argumenty do przekazania. Może to być przydatne podczas włączania dostawców, którzy oczekują długich argumentów lub w przypadku używania środowiska powłoki, które usuwa znaki.

Na przykład następujący dostawca może być uciążliwy do wpisywania za każdym razem, gdy chcesz śledzić:

dotnet-trace collect --providers Microsoft-Diagnostics-DiagnosticSource:0x3:5:FilterAndPayloadSpecs="SqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandBefore@Activity1Start:-Command;Command.CommandText;ConnectionId;Operation;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nSqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandAfter@Activity1Stop:\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting@Activity2Start:-Command;Command.CommandText;ConnectionId;IsAsync;Command.Connection.ClientConnectionId;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted@Activity2Stop:",OtherProvider,AnotherProvider

Ponadto poprzedni przykład zawiera " się jako część argumentu. Ponieważ cudzysłowy nie są obsługiwane w równym stopniu przez każdą powłokę, podczas korzystania z różnych powłok mogą wystąpić różne problemy. Na przykład polecenie, które należy wprowadzić, zsh różni się od polecenia w pliku cmd.

Zamiast wpisywać to za każdym razem, możesz zapisać następujący tekst w pliku o nazwie myprofile.rsp.

--providers
Microsoft-Diagnostics-DiagnosticSource:0x3:5:FilterAndPayloadSpecs="SqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandBefore@Activity1Start:-Command;Command.CommandText;ConnectionId;Operation;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nSqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandAfter@Activity1Stop:\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting@Activity2Start:-Command;Command.CommandText;ConnectionId;IsAsync;Command.Connection.ClientConnectionId;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted@Activity2Stop:",OtherProvider,AnotherProvider

Po zapisaniu myprofile.rsppolecenia możesz uruchomić dotnet-trace przy użyciu tej konfiguracji przy użyciu następującego polecenia:

dotnet-trace @myprofile.rsp

Zobacz też