Kontrola trasování spravovaných zásobníků (dotnet-stack)

Tento článek se vztahuje na: ✔️ dotnet-stack verze 5.0.221401 a novější verze

Instalace

Existují dva způsoby, jak stáhnout a nainstalovat dotnet-stack:

Synopse

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

Popis

Nástroj dotnet-stack :

  • Je multiplatformní nástroj .NET Core.
  • Zaznamená a vytiskne spravované zásobníky pro všechna vlákna v cílovém procesu .NET.
  • EventPipe Využívá trasování poskytované modulem runtime .NET Core.

Možnosti

  • -h|--help

    Zobrazuje nápovědu k příkazovému řádku.

  • --version

    Zobrazí verzi nástroje dotnet-stack.

Příkazy

Příkaz Popis
dotnet-stack report Vytiskne trasování zásobníku pro každé vlákno v cílovém procesu.
dotnet-stack ps Obsahuje seznam procesů dotnet, ze které lze shromažďovat trasování zásobníku.
dotnet-stack symbolická Získá číslo řádku z tokenu metody a posunu IL v trasování zásobníku.

dotnet-stack report

Vytiskne trasování zásobníku pro každé vlákno v cílovém procesu.

Synopse

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

Možnosti

  • -n, --name <name>

    Název procesu pro nahlášení zásobníku.

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

    ID procesu, ze které se má nahlásit zásobník.

dotnet-stack ps

Obsahuje seznam procesů dotnet, ze které lze shromažďovat trasování zásobníku. dotnet-stack Verze 6.0.320703 a novější verze také zobrazují argumenty příkazového řádku, se kterými byly jednotlivé procesy spuštěny, pokud jsou k dispozici.

Synopse

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

Příklad

Předpokládejme, že spustíte dlouhotrvající aplikaci pomocí příkazu dotnet run --configuration Release. V jiném okně spustíte dotnet-stack ps příkaz. Výstup, který uvidíte, je následující. Argumenty příkazového řádku( pokud existují) se zobrazují ve dotnet-stack verzi 6.0.320703 a novější.

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

dotnet-stack symbolická

Získá číslo řádku z tokenu metody a posunu IL v trasování zásobníku.

Synopse

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

Možnosti

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

    Cesta více adresářů se sestavením a pdb

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

    Výstup přímo do souboru.

  • -c, --stdout

    Výstup je přímo do konzoly.

Příklad

> 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

Spravované zásobníky sestav s využitím dotnet-stacku

Generování sestav spravovaných zásobníků pomocí dotnet-stack:

  • Získejte identifikátor procesu (PID) aplikace .NET Core pro zásobníky sestav.

    • Ve Windows můžete například použít Správce úloh nebo tasklist příkaz.
    • Například v Linuxu příkaz ps .
    • dotnet-stack ps
  • Spusťte následující příkaz:

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

    Předchozí příkaz generuje výstup podobný následujícímu:

    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[])
    

    Výstup dotnet-stack následující formy:

    • Komentáře ve výstupu mají předponu #.
    • Každé vlákno má hlavičku, která obsahuje ID nativního vlákna: Thread (<thread-id>):.
    • Snímky zásobníku se řídí formulářem Module!Method.
    • Přechody na nespravovaný kód jsou reprezentovány jako [Native Frames] ve výstupu.
    # comment
    Thread (0x1234):
      module!Method
      module!Method
    
    Thread (0x5678):
      [Native Frames]
      Module!Method
      Module!Method
    

Poznámka:

Zastavení procesu může trvat dlouhou dobu (až několik minut) pro velmi velké aplikace. Modul runtime musí odesílat informace o typu a metodě pro veškerý spravovaný kód zachycený za účelem překladu názvů funkcí.

Další kroky