Partager via


Inspecter les rapports managés des appels de procédure (dotnet-stack)

Cet article s’applique à : ✔️ dotnet-stack version 5.0.221401 et versions ultérieures

Installer

Il existe deux façons de télécharger et d’installer dotnet-stack :

Synopsis

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

Description

L’outil dotnet-stack :

  • Est un outil .NET Core multiplateforme.
  • Capture et imprime les piles managées pour tous les threads du processus .NET cible.
  • Utilise le suivi EventPipe fourni par le runtime .NET Core.

Options

  • -h|--help

    Affiche l’aide de la ligne de commande.

  • --version

    Affiche la version de l’utilitaire dotnet-stack.

Commandes

Command Description
dotnet-stack report Imprime le rapport des appels de procédure pour chaque thread du processus cible.
dotnet-stack ps Liste les processus dotnet dont les rapports d’appels de procédure peuvent être collectés.
dotnet-stack symbolicate Obtient le numéro de ligne à partir du jeton de méthode et du décalage IL dans un rapport d’appels de procédure.

dotnet-stack report

Imprime le rapport des appels de procédure pour chaque thread du processus cible.

Synopsis

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

Options

  • -n, --name <name>

    Nom du processus à partir duquel établir le rapport relatif à la pile.

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

    ID de processus à partir duquel établir le rapport relatif à la pile.

dotnet-stack ps

Liste les processus dotnet dont les rapports d’appels de procédure peuvent être collectés. dotnet-stack version 6.0.320703 et versions ultérieures affichent également les arguments de ligne de commande avec lesquels chaque processus a été démarré, s’ils sont disponibles.

Synopsis

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

Exemple

Supposons que vous démarriez une application de longue durée à l’aide de la commande dotnet run --configuration Release. Dans une autre fenêtre, vous exécutez la commande dotnet-stack ps . La sortie que vous verrez est la suivante. Les arguments de ligne de commande, le cas échéant, sont affichés dans dotnet-stack version 6.0.320703 et versions ultérieures.

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

dotnet-stack symbolicate

Obtient le numéro de ligne à partir du jeton de méthode et du décalage IL dans un rapport d’appels de procédure.

Synopsis

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

Options

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

    Chemin d’accès de plusieurs répertoires avec assembly et pdb.

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

    Sortie directe vers un fichier.

  • -c, --stdout

    Sortie directe vers une console.

Exemple

> 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

Établir un rapport sur les piles managées avec dotnet-stack

Pour établir un rapport sur les piles managées à l’aide de dotnet-stack :

  • Procurez-vous l’identificateur de processus (PID) de l’application .NET Core à partir de laquelle les piles doivent faire l’objet d’un rapport.

    • Sous Windows, vous pouvez utiliser le Gestionnaire des tâches ou la commande tasklist, par exemple.
    • Sous Linux, utilisez par exemple la commande ps.
    • dotnet-stack ps
  • Exécutez la commande suivante :

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

    La commande précédente génère une sortie semblable à la suivante :

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

    La sortie de dotnet-stack se présente comme suit :

    • Les commentaires figurant dans la sortie affichent le préfixe #.
    • Chaque thread comporte un en-tête qui comprend l’ID du thread natif : Thread (<thread-id>):.
    • Les frames de pile suivent la forme Module!Method.
    • Les transitions vers du code non managé sont représentées sous forme de [Native Frames] dans la sortie.
    # comment
    Thread (0x1234):
      module!Method
      module!Method
    
    Thread (0x5678):
      [Native Frames]
      Module!Method
      Module!Method
    

Notes

L’arrêt du processus peut prendre beaucoup de temps (plusieurs minutes) pour les applications très volumineuses. Le runtime doit envoyer les informations de type et de méthode de tout le code managé qui a été capturé pour résoudre les noms de fonction.

Étapes suivantes