Udostępnij za pośrednictwem


Inspekcja zarządzanych śladów stosu (dotnet-stack)

Ten artykuł dotyczy: ✔️ dotnet-stack wersja 5.0.221401 lub nowsza

Instalowanie

Istnieją dwa sposoby pobierania i instalowania dotnet-stackprogramu :

Streszczenie

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

opis

Narzędzie dotnet-stack :

  • To międzyplatformowe narzędzie .NET Core.
  • Przechwytuje i drukuje zarządzane stosy dla wszystkich wątków w docelowym procesie platformy .NET.
  • Wykorzystuje śledzenie udostępniane przez środowisko uruchomieniowe platformy EventPipe .NET Core.

Opcje

  • -h|--help

    Pokazuje pomoc wiersza polecenia.

  • --version

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

Polecenia

Polecenie opis
dotnet-stack report Drukuje ślad stosu dla każdego wątku w procesie docelowym.
dotnet-stack ps Wyświetla listę procesów dotnet, z których można zbierać ślady stosu.
dotnet-stack symboliczny Pobierz numer wiersza z tokenu metody i przesunięcia IL w stostrace.

dotnet-stack report

Drukuje ślad stosu dla każdego wątku w procesie docelowym.

Streszczenie

dotnet-stack report -p|--process-id <pid>
                    -n|--name <process-name>
                    [-h|--help]

Opcje

  • -n, --name <name>

    Nazwa procesu raportowania stosu.

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

    Identyfikator procesu do raportowania stosu z.

dotnet-stack ps

Wyświetla listę procesów dotnet, z których można zbierać ślady stosu. dotnet-stack W wersji 6.0.320703 i nowszych wersjach są również wyświetlane argumenty wiersza polecenia, z którymi uruchomiono każdy proces, jeśli jest dostępny.

Streszczenie

dotnet-stack 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-stack ps polecenie . Dane wyjściowe, które zobaczysz, są następujące. Argumenty wiersza polecenia, jeśli istnieją, są wyświetlane w dotnet-stack wersji 6.0.320703 lub nowszej.

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

dotnet-stack symboliczny

Pobierz numer wiersza z tokenu metody i przesunięcia IL w stostrace.

Streszczenie

dotnet-stack symbolicate <input-path> [-d|--search-dir] [-o|--output] [-c|--stdout] [-h|--help]

Opcje

  • -d, --search-dir <directory1 directory2 ...>

    Ścieżka wielu katalogów z zestawem i plikiem pdb.

  • -o, --output <output-path>

    Dane wyjściowe bezpośrednio do pliku.

  • -c, --stdout

    Dane wyjściowe bezpośrednio do konsoli.

Przykład

> cat stack.trace

Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at DotnetStackSymbolicate.App.MethodA() in DotnetStackSymbolicate.dll:token 0x6000002+0x6
   at DotnetStackSymbolicate.App..ctor() in DotnetStackSymbolicate.dll:token 0x6000003+0x51
   at DotnetStackSymbolicate.Program.OnCreate() in DotnetStackSymbolicate.Tizen.dll:token 0x6000001+0x8
onSigabrt called
>
> dotnet-stack symbolicate stack.trace --stdout

Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at DotnetStackSymbolicate.App.MethodA() in C:\DotnetStackSymbolicate\DotnetStackSymbolicate.cs:line 19
   at DotnetStackSymbolicate.App..ctor() in C:\DotnetStackSymbolicate\DotnetStackSymbolicate.cs:line 38
   at DotnetStackSymbolicate.Program.OnCreate() in C:\DotnetStackSymbolicate.Tizen\DotnetStackSymbolicate.Tizen.cs:line 12
onSigabrt called

Output: stack.trace.symbolicated

Zarządzane stosy raportów z dotnet-stack

Aby zgłosić zarządzane stosy przy użyciu polecenia dotnet-stack:

  • Pobierz identyfikator procesu (PID) aplikacji .NET Core do raportowania stosó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-stack ps
  • Uruchom następujące polecenie:

    dotnet-stack report --process-id <PID>
    

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

    Thread (0x48839B):
      [Native Frames]
      System.Console!System.IO.StdInReader.ReadKey(bool&)
      System.Console!System.IO.SyncTextReader.ReadKey(bool&)
      System.Console!System.ConsolePal.ReadKey(bool)
      System.Console!System.Console.ReadKey()
      StackTracee!Tracee.Program.Main(class System.String[])
    

    Dane wyjściowe następującego dotnet-stack formularza:

    • Komentarze w danych wyjściowych są poprzedzone prefiksem #.
    • Każdy wątek ma nagłówek zawierający identyfikator wątku natywnego: Thread (<thread-id>):.
    • Ramki stosu są zgodne z formularzem Module!Method.
    • Przejścia do niezarządzanych kodów są reprezentowane jako [Native Frames] w danych wyjściowych.
    # comment
    Thread (0x1234):
      module!Method
      module!Method
    
    Thread (0x5678):
      [Native Frames]
      Module!Method
      Module!Method
    

Uwaga

Zatrzymanie procesu może potrwać długo (do kilku minut) w przypadku bardzo dużych aplikacji. Środowisko uruchomieniowe musi wysyłać informacje o typie i metodzie dla całego kodu zarządzanego przechwyconego w celu rozpoznawania nazw funkcji.

Następne kroki