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
:
outil global dotnet :
Pour installer la dernière version de version du
dotnet-stack
package NuGet, utilisez la commande installation de l’outil dotnet :dotnet tool install --global dotnet-stack
Téléchargement direct :
Téléchargez l’exécutable de l’outil qui correspond à votre plateforme :
Système d''exploitation Plateforme Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
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
- Sous Windows, vous pouvez utiliser le Gestionnaire des tâches ou la commande
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
- Les commentaires figurant dans la sortie affichent le préfixe
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.