Partager via


Extension de débogage SOS

L’extension de débogage SOS vous permet d’afficher des informations sur le code qui s’exécute à l’intérieur du runtime .NET, à la fois sur les processus en direct et les vidages. L’extension est préinstallée avec dotnet-dump et Windbg/dbg, et peut être téléchargée à des fins d’utilisation avec LLDB. Vous pouvez utiliser l’extension de débogage SOS pour :

  • Collecter des informations sur le tas managé.
  • Rechercher des corruptions de tas.
  • Afficher les types de données internes utilisés par le runtime.
  • Afficher des informations sur tout le code managé s’exécutant à l’intérieur du runtime.

Syntaxe

Sur Windows : ![command] [options]

Sur Linux et macOS : sos [command] [options]

La plupart des commandes ont des alias ou des raccourcis sous lldb : clrstack [options]

Commandes

Le tableau de commandes suivant est également disponible sous Aide ou soshelp. L’aide relative aux commandes individuelles est disponible à l’aide de soshelp <command>.

Commande Description
bpmd [-nofuturemodule] [<nom> de la méthode de nom><du module] [-mdMethodDesc<>] -list -clear<pending breakpoint number-clearall> Crée un point d'arrêt sur la méthode spécifiée dans le module spécifié.

Si le module et la méthode spécifiés n'ont pas été chargés, cette commande attend une notification indiquant que le module a été chargé et compilé juste-à-temps avant de créer un point d'arrêt.

Vous pouvez gérer la liste de points d’arrêt en attente à l’aide des options -list, -clear et -clearall :

L’option -list génère une liste de tous les points d’arrêt en attente. Si un point d'arrêt en attente a un ID de module non nul, ce point d'arrêt est spécifique à une fonction dans ce module spécifique chargé. Si le point d'arrêt en attente a un ID de module nul, ce point d'arrêt s'applique aux modules qui n'ont pas encore été chargés.

Utilisez l’option -clear ou -clearall pour supprimer des points d’arrêt en attente dans la liste.
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] Fournit uniquement une trace de la pile du code managé.

L’option -p fournit les arguments à la fonction managée.

L’option -l fournit des informations sur les variables locales dans un frame. L’extension de débogage SOS ne peut pas récupérer les noms locaux. La sortie des noms locaux est donc au format <de la valeur> d’adresse=<>locale.

L’option -a est un raccourci de la combinaison de -l et -p.

L’option -n désactive l’affichage des noms de fichier source et des numéros de ligne. Si l'option SYMOPT_LOAD_LINES est spécifiée sur le débogueur, SOS recherche les symboles pour chaque frame managé et, s'il les trouve, affiche le nom de fichier source et le numéro de ligne correspondants. Le paramètre -n (aucun numéro de ligne) peut être spécifié pour désactiver ce comportement.

L’option -f (mode complet) affiche les images natives qui les combinent avec les images managées, le nom de l’assembly et le décalage de fonction pour les images managées. Cette option n’affiche pas les images natives lorsqu’elles sont utilisées avec dotnet-dump.

L’option -r vide les registres pour chaque frame de pile.

L’option -all vide toutes les piles des threads managés.
COMState Répertorie le modèle cloisonné COM pour chaque thread et un pointeur Context, si disponible. Cette commande est uniquement prise en charge sur Windows.
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <array object address>

-ou-

DA [-start<startIndex>] [-length<length>] [-details] [-nofields] adresse de l’objet de tableau>
Examine les éléments d'un objet tableau.

L’option -start spécifie l’index de départ à partir duquel les éléments doivent être affichés.

L’option -length spécifie le nombre d’éléments à afficher.

L’option -details affiche les détails de l’élément en utilisant les formats DumpObj et DumpVC.

L’option -nofields empêche l’affichage des tableaux. Cette option est disponible uniquement quand l’option -detail est spécifiée.
DumpAsync (dumpasync) [-mt<MethodTable address>] [-type<partial type name>] [-waiting] [-roots] DumpAsync traverse le tas récupéré par le garbage et recherche des objets représentant des machines à états asynchrones créés lors du transfert de l’état d’une méthode asynchrone vers le tas. Cette commande reconnaît les machines à états asynchrones définis comme async void, async Task, async Task<T>, async ValueTask et async ValueTask<T>.

La sortie inclut un bloc de détails pour chaque objet de machine à états asynchrones trouvé. Ces détails sont les suivants :
- Ligne pour le type d’objet de machine à états asynchrones, y compris son adresse MethodTable, son adresse d’objet, sa taille et son nom de type.
- Ligne pour le nom du type de machine à états tel qu’il est contenu dans l’objet.
- Liste de chaque champ de la machine à états.
- Ligne d’une continuation à partir de cet objet de machine à états, si un ou plusieurs ont été inscrits.
- Découverte des racines GC pour cet objet de machine à états asynchrones.
DumpAssembly<assembly address> Affiche des informations concernant un assembly.

La commande DumpAssembly répertorie plusieurs modules, s’ils existent.

Vous pouvez obtenir une adresse d’assembly à l’aide de la commande DumpDomain.
DumpClass<EEClass address> Affiche des informations sur la structure EEClass associée à un type.

La commande DumpClass affiche des valeurs de champ static, mais pas les valeurs de champ non static.

Utilisez la commande DumpMT, DumpObj, Name2EE ou Token2EE pour obtenir une adresse de structure EEClass.
DumpDomain [<domain address>] Énumère chaque Assembly objet chargé dans l’adresse de l’objet spécifié AppDomain . En cas d’appel sans paramètres, la commande DumpDomain répertorie tous les objets AppDomain dans un processus. Étant donné que .NET (Core) n’a qu’un AppDomainseul objet, DumpDomain ne retourne qu’un seul objet.
DumpHeap [-stat] [-strings] [-short] [-min<size>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type<partial type name>] [start [end]] Affiche des informations sur le tas récupéré par le récupérateur de mémoire et des statistiques de collection concernant les objets.

La commande DumpHead affiche un avertissement si elle détecte une fragmentation excessive dans le tas de récupérateur de mémoire.

L’option -stat restreint la sortie au récaptitulatif de type statistique.

L’option -string restreint la sortie à un récapitulatif de la valeur de la chaîne statistique.

L’option -short limite la sortie à l’adresse de chaque objet. Cela vous permet de canaliser facilement une sortie depuis la commande vers une autre commande de débogueur pour l'automation.

L’option -min ignore les objets inférieurs au paramètre size, spécifié en octets.

L’option -max ignore les objets inférieurs au paramètre size, spécifié en octets.

L’option -thinlock indique ThinLocks. Pour plus d’informations, consultez la commande SyncBlk.

L'option -startAtLowerBound force le parcours du segment de mémoire à commencer à la limite inférieure d'une plage d'adresses fournie. Pendant la phase de planification, le tas n'est pas souvent opérationnel parce que des objets sont déplacés. Cette option force DumpHead à commencer son parcours à la limite inférieure spécifiée. Vous devez fournir l'adresse d'un objet valide comme limite inférieure pour que cette option fonctionne. Vous pouvez afficher la mémoire à l'adresse d'un mauvais objet pour rechercher manuellement la table de méthodes suivante. Si le garbage collection est actuellement en communication avec memcopy, vous pouvez également rechercher l'adresse de l'objet suivant en ajoutant la taille à l'adresse de démarrage, qui est fournie comme paramètre.

L’option -mt répertorie uniquement les objets qui correspondent à la structure MethodTable spécifiée.

L’option -type répertorie uniquement les objets dont le nom de type correspond à une sous-chaîne de la chaîne spécifiée.

Le paramètre start commence à répertorier les éléments à partir de l'adresse spécifiée.

Le paramètre end cesse de répertorier les éléments à l'adresse spécifiée.
DumpIL<Managed DynamicMethod object> | <DynamicMethodDesc pointer> | <MethodDesc pointer> Affiche le langage intermédiaire commun (CIL) associé à une méthode managée.

La bibliothèque CIL dynamique est émise différemment de celle chargée à partir d’un assembly. La bibliothèque CIL dynamique fait référence aux objets d’un tableau d’objets managés plutôt qu’aux jetons de métadonnées.
DumpLog [-addr<addressOfStressLog>] [<Filename>] Écrit le contenu d'un journal de contrainte en mémoire dans le fichier spécifié. Si vous ne spécifiez pas de nom, cette commande crée un fichier appelé StressLog.txt dans le répertoire actif.

Le journal de contrainte en mémoire vous aide à diagnostiquer les échecs de contrainte sans utiliser de verrous ou d'E/S. Pour activer le journal de contrainte, définissez les clés de Registre suivantes sous HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework :

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

L'option -addr facultative vous permet de spécifier un journal de contrainte autre que le journal par défaut.
DumpMD<MethodDesc address> Affiche des informations sur une structure MethodDesc à l'adresse spécifiée.

Vous pouvez utiliser la commande IP2MD pour obtenir l’adresse de structure MethodDesc d’une fonction managée.
DumpMT [-MD] <MethodTable address> Affiche des informations sur une table de méthodes à l'adresse spécifiée. Quand l’option -MD est spécifiée, une liste de toutes les méthodes définies avec l’objet s’affiche.

Chaque objet managé contient un pointeur de table de méthodes.
DumpModule [-mt] <Module address> Affiche des informations sur un module à l'adresse spécifiée. L’option -mt affiche les types définis dans un module et les types référencés par le module

Vous pouvez utiliser la commande DumpDomain ou DumpAssembly pour récupérer l’adresse d’un module.
DumpObj [-nofields] <object address>

-ou-

DO<object address>
Affiche des informations sur un objet à l'adresse spécifiée. La commande DumpObj affiche les champs, les informations de la structure EEClass, la table de méthodes et la taille de l’objet.

Vous pouvez utiliser la commande DumpStackObjects pour récupérer l’adresse d’un objet.

Vous pouvez exécuter la commande DumpObj dans les champs de type CLASS, car ce sont également des objets.

L’option -nofields empêche l’affichage des champs de l’objet, ce qui est utile pour des objets comme String.
DumpRuntimeTypes Affiche les objets de type au moment de l'exécution dans le tas de récupérateur de mémoire et répertorie leurs noms de types et tables de méthodes associés.
DumpStack [-EE] [-n] [top stack [bottom stack]] Affiche une trace de la pile.

Quand l’option -EE est spécifiée, la commande DumpStack affiche uniquement les fonctions managées. Utilisez les paramètres top et bottom pour limiter les frames de pile affichés sur les plateformes x86.

L’option -n désactive l’affichage des noms de fichier source et des numéros de ligne. Si l'option SYMOPT_LOAD_LINES est spécifiée sur le débogueur, SOS recherche les symboles pour chaque frame managé et, s'il les trouve, affiche le nom de fichier source et le numéro de ligne correspondants. Le paramètre -n (aucun numéro de ligne) peut être spécifié pour désactiver ce comportement.
DumpSig<sigaddr><moduleaddr> Affiche des informations sur une structure Sig à l'adresse spécifiée.
DumpSigElem<sigaddr><moduleaddr> Affiche un élément unique d'un objet de signature. Dans la plupart des cas, vous devez utiliser DumpSig pour examiner des objets de signature individuels. Toutefois, si une signature est endommagée, vous pouvez utiliser DumpSigElem pour lire ses parties valides.
DumpStackObjects [-verify] [top stack [bottom stack]]

-ou-

DSO [-verify] [top stack [bottom stack]]
Affiche tous les objets managés recherchés dans les limites de la pile actuelle.

L’option -verify valide chaque champ CLASS non static d’un champ d’objet.

Utilisez la commande DumpStackObject avec les commandes de traçage de la pile, comme la commande K (windbg) ou bt (lldb) et la commande clrstack pour déterminer les valeurs des variables et paramètres locaux.
DumpVC<MethodTable address><Address> Affiche des informations sur les champs d'une classe de valeur à l'adresse spécifiée.

Le paramètre MethodTable permet à la commande DumpVC d’interpréter correctement les champs. Les classes de valeur ne disposent pas d'une table de méthodes comme premier champ.
EEHeap [-gc] [-loader] Affiche des informations sur la mémoire du processus consommée par les structures de données internes du runtime.

Les options -gc et -loader limitent la sortie de cette commande aux structures de données du récupérateur de mémoire ou du chargeur.

Les informations pour le récupérateur de mémoire répertorient les plages de chaque segment dans le tas managé. Si le pointeur se trouve dans une plage de segments spécifiée par -gc, il s’agit d’un pointeur d’objet.
EEStack [-short] [-EE] Exécute la commande DumpStack sur tous les threads dans le processus.

L’option -EE est passée directement à la commande DumpStack. Le paramètre -short limite la sortie aux types de threads suivants :

Threads avec un verrou.

Threads bloqués pour permettre un garbage collection.

Threads se trouvant actuellement dans le code managé.
EHInfo [<MethodDesc address>] [<Code address>] Affiche les blocs de gestion des exceptions dans une méthode spécifiée. Cette commande affiche les adresses de code et les offsets du bloc de clause (bloc try) et du bloc de gestionnaire (bloc catch).
FORUM AUX QUESTIONS Affiche les questions fréquemment posées. Non pris en charge dans dotnet-dump.
FinalizeQueue [-detail] | [-allReady] [-short] Affiche tous les objets enregistrés pour la finalisation.

L’option -detail affiche des informations supplémentaires sur les SyncBlocks qui doivent être nettoyés, ainsi que sur les RuntimeCallableWrappers (RCW) en attente de nettoyage. Ces deux structures de données sont mises en cache et nettoyées par le thread finaliseur lorsqu'il est exécuté.

L'option -allReady affiche tous les objets prêts pour la finalisation, qu'ils soient déjà marqués comme tel par le garbage collection ou qu'ils le soient par le garbage collection suivant. Les objets qui ne figurent pas dans la liste "prêt pour la finalisation" sont des objets finalisables qui ne sont plus associés à une racine. Cette option peut s'avérer très coûteuse, car elle vérifie si tous les objets des files d'attente finalisables sont toujours associés à une racine.

L'option -short limite la sortie à l'adresse de chaque objet. Si elle est utilisée conjointement à -allReady, elle énumère tous les objets qui ont un finaliseur qui n’est plus associé à une racine. S'il est utilisé indépendamment, il répertorie tous les objets dans les files d'attente finalisables et "prêtes pour la finalisation".
FindAppDomain<Object address> Détermine le domaine d'application d'un objet à l'adresse spécifiée.
FindRoots -gen<N> | -gen any |<adresse de l’objet> Provoque l’arrêt du débogueur dans l’élément débogué sur la collection suivante de la génération spécifiée. L'effet est réinitialisé dès que l'arrêt se produit. Pour arrêter la collection suivante, vous devez rééditer la commande. La forme <adresse d’objet> de cette commande est utilisée après l’arrêt provoqué par -gen ou -gen any. À cet instant, l’élément débogué est dans l’état nécessaire pour que FindRoots identifie des racines pour les objets à partir des générations condamnées actuelles. Prise en charge uniquement sur Windows.
GCHandles [-perdomain] Affiche des statistiques sur les handles du récupérateur de mémoire dans le processus.

L’option -perdomain organise les statistiques par domaine d’application.

Utilisez la commande GCHandles pour rechercher les fuites de mémoire provoquées par les fuites du handle du récupérateur de mémoire. Par exemple, une fuite de mémoire se produit lorsque le code conserve un grand tableau, car un handle fort du récupérateur de mémoire pointe encore sur ce dernier ; le handle est ignoré sans libérer le tableau.

Prise en charge uniquement sur Windows.
GCHandleLeaks Recherche dans la mémoire des références à des handles forts et épinglés du récupérateur de mémoire dans le processus et affiche les résultats. Si un handle est trouvé, la commande GCHandleLeaks affiche l’adresse de la référence. Si aucun handle n'est trouvé dans la mémoire, cette commande affiche une notification. Prise en charge uniquement sur Windows.
GCInfo<MethodDesc address><Code address> Affiche les données spécifiant les registres ou les emplacements de pile contenant des objets managés. Si un garbage collection a lieu, le collector doit connaître les emplacements des références aux objets pour pouvoir les mettre à jour avec les nouvelles valeurs de pointeur d’objet.
GCRoot [-nostacks] [-all] <Object address> Affiche des informations sur les références (ou racines) à un objet à l'adresse spécifiée.

La commande GCRoot examine le tas managé tout entier et la table des handles d’autres objets et des handles de la pile. Une recherche des pointeurs vers les objets est ensuite réalisée dans chaque pile et dans la file d'attente du finaliseur.

Cette commande ne détermine pas si la racine d'une pile est valide ou ignorée. Utilisez les commandes clrstack et U pour désassembler le frame auquel appartient la valeur locale ou d’argument, pour déterminer si la racine d’une pile est encore utilisée.

L’option -nostacks restreint la recherche aux handles du récupérateur de mémoire et aux objets accessibles.

L’option -all force l’affichage de toutes les racines au lieu de racines uniques.
Adresse de l’objet GCWhere< > Affiche l’emplacement et la taille dans le tas de garbage collection de l’argument passé. Lorsque l’argument se trouve dans le tas managé, mais n’est pas une adresse d’objet valide, la taille s’affiche en tant que 0 (zéro).
Help (soshelp) [<command>] [faq] Affiche toutes les commandes disponibles lorsque aucun paramètre n'est spécifié ou affiche des informations d'aide détaillées sur la commande spécifiée.

Le paramètre faq affiche les réponses aux questions fréquentes.
HeapStat [-inclUnrooted | -iu] Affiche les tailles de génération pour chaque tas et l'espace libre total dans chaque génération sur chaque tas. Si l’option -inclUnrooted est spécifiée, le rapport inclut des informations sur les objets managés du tas de garbage collection qui n’est plus associé à une racine. Prise en charge uniquement sur Windows.
HistClear Libère toutes les ressources utilisées par la famille de commandes Hist.

En général, vous n'avez pas à appeler HistClearexplicitement, parce que chaque HistInit nettoie les ressources précédentes.
HistInit Initialise les structures SOS du journal de contrainte enregistré dans l’élément débogué.
HistObj <obj_address> Examine tous les enregistrements de réadressage du journal de contrainte et affiche la chaîne des réadressages de garbage collection qui ont pu mener à l’adresse passée comme un argument.
HistObjFind <obj_address> Affiche toutes les entrées de journal qui référencent un objet à l'adresse spécifiée.
Racine HistRoot <> Affiche les informations liées aux promotions et aux réadressages de la racine spécifiée.

La valeur racine peut être utilisée pour suivre le déplacement d’un objet dans les garbage collections.
IP2MD (ip2md) <Code address> Affiche la structure MethodDesc à l'adresse spécifiée dans le code compilé juste-à-temps (JIT).
ListNearObj (lno) <obj_address> Affiche les objets précédant et suivant l'adresse spécifiée. La commande recherche dans le tas de garbage collection l’adresse qui ressemble à un début valide d’objet managé (selon une table de méthodes valide), ainsi que l’objet qui suit l’adresse d’argument. Prise en charge uniquement sur Windows.
MinidumpMode [0] [1] Empêche l'exécution de commandes potentiellement dangereuses lors de l'utilisation d'un minidump.

Passez 0 pour désactiver cette fonctionnalité ou 1 pour l’activer. Par défaut, la valeur de MinidumpMode est 0.

Les minidumps créés avec la commande .dump /m ou .dump ont des données propres à CLR limitées et vous permettent uniquement d’exécuter correctement un sous-ensemble de commandes SOS. Certaines commandes peuvent échouer avec des erreurs inattendues, car des zones de mémoire requises ne sont pas mappées ou ne sont mappées que partiellement. Cette option vous empêche d'exécuter des commandes potentiellement dangereuses dans les minidumps.

Prise en charge uniquement avec Windbg.
Name2EE (name2ee) <nom du module><nom du type ou de la méthode>

-ou-

Name2EE<nom du module>!<nom du type ou de la méthode>
Affiche la structure MethodTable et la structure EEClass pour le type ou la méthode spécifié dans le module spécifié.

Le module spécifié doit être chargé dans le processus.

Pour obtenir le nom de type correct, parcourez le module à l’aide de Ildasm.exe (désassembleur IL). Vous pouvez également passer * en tant que paramètre de nom de module pour rechercher tous les modules managés chargés. Le paramètre module name peut également correspondre au nom du débogueur pour un module, comme mscorlib ou image00400000.

Cette commande prend en charge la syntaxe du débogueur Windows <module>!<type>. Le type doit être qualifié complet.
ObjSize [<Object address>] | [-aggregate] [-stat] Affiche la taille de l'objet spécifié. Si vous ne spécifiez aucun paramètre, la commande ObjSize affiche la taille de tous les objets trouvés dans les threads managés, ainsi que tous les handles du récupérateur de mémoire dans le processus et additionne la taille de tous les objets désignés par ces handles. La commande ObjSize inclut la taille de tous les objets enfants en plus du parent.

L’option -aggregate peut être utilisée avec l’argument -stat pour obtenir une vue détaillée des types qui sont encore associés à une racine. L’utilisation de !dumpheap -stat et !objsize -aggregate -stat vous permet de déterminer les objets qui ne sont plus associés à une racine et de diagnostiquer différents problèmes de mémoire.

Prise en charge uniquement sur Windows.
PrintException [-nested] [-lines] [<Exception object address>]

-ou-

PE [-nested] [<Exception object address>]
Affiche et met en forme les champs de tous les objets dérivés de la classe Exception à l'adresse spécifiée. Si vous ne spécifiez pas d’adresse, la commande PrintException affiche la dernière exception levée dans le thread actuel.

L’option -nested affiche des détails sur les objets d’exception imbriquée.

L’option -lines affiche des informations sur la source, si elles sont disponibles.

Vous pouvez utiliser cette commande pour mettre en forme et consulter le champ _stackTrace qui est un tableau binaire.
ProcInfo [-env] [-time] [-mem] Affiche les variables d'environnement pour le processus, le temps CPU noyau et les statistiques relatives à l'utilisation de la mémoire. Prise en charge uniquement avec Windbg.
RCWCleanupList<RCWCleanupList address> Affiche la liste des wrappers RCW (Runtime Callable Wrapper) à l'adresse spécifiée qui sont en attente de nettoyage. Prise en charge uniquement avec Windbg.
SaveModule<Base address><Filename> Écrit une image, chargée dans la mémoire à l'adresse spécifiée, dans le fichier spécifié. Prise en charge uniquement avec Windbg.
SetHostRuntime [<runtime-directory>] Cette commande définit le chemin d’accès au runtime .NET à utiliser pour héberger le code managé qui s’exécute dans le cadre de SOS dans le débogueur (lldb). La version minimale du runtime doit être 2.1.0. S’il existe des espaces dans le répertoire, il doit être placé entre guillemets simples (').

Normalement, SOS tente de trouver un runtime .NET installé pour exécuter automatiquement son code managé, mais cette commande est disponible en cas d’échec. La valeur par défaut consiste à utiliser le même runtime (libcoreclr) en cours de débogage. Utilisez cette commande si le runtime par défaut en cours de débogage ne permet pas d’exécuter le code SOS ou si la version est inférieure à 2.1.0.

Si vous avez reçu le message d’erreur suivant lors de l’exécution d’une commande SOS, utilisez cette commande pour définir le chemin d’accès à 2.1.0 ou version ultérieure du runtime .NET.

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

Vous pouvez utiliser « dotnet --info » dans un interpréteur de commandes pour rechercher le chemin d’accès d’un runtime .NET installé.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] Active la prise en charge du téléchargement du serveur de symboles.

L’option -ms active le téléchargement à partir du serveur public de symboles Microsoft.

L’option -disable active la prise en charge du téléchargement des symboles.

L’option -cache<cache-path> spécifie un répertoire de cache de symboles. La valeur par défaut est $HOME/.dotnet/symbolcache si elle n’est pas spécifiée.

L’option -directory ajoute un chemin d’accès pour rechercher des symboles. Il peut en exister plusieurs.

L’option -sympath ajoute des chemins de serveur, de cache et de répertoire au format de chemin d’accès aux symboles Windows.

L’option -log active la journalisation des symboles.

L’option -loadsymbols tente de télécharger les symboles .NET natifs pour le runtime. Prise en charge sur lldb et dotnet-dump.
SOSFlush Vide un cache SOS interne.
SOSStatus [-reset] Affiche l’état SOS interne ou réinitialise l’état mis en cache interne.
StopOnException [-derived] [-create | -create2] <Exception><Pseudo-register number> Entraîne l'arrêt du débogueur lorsque l'exception spécifiée est levée, mais la poursuite de son exécution lorsque d'autres exceptions sont levées.

L’option -derived intercepte l’exception spécifiée et chaque exception dérivée de l’exception spécifiée.

Prise en charge uniquement avec Windbg.
SyncBlk [-all | <syncblk number>] Affiche la structure SyncBlock spécifiée ou l'ensemble des structures SyncBlock. Si vous ne passez pas d’argument, la commande SyncBlk affiche la structure SyncBlock correspondant aux objets possédés par un thread.

Une structure SyncBlock est un conteneur pour les informations supplémentaires qui n'a pas besoin d'être créé pour chaque objet. Elle peut contenir des données COM Interop, des codes de hachage et des informations de verrouillage pour les opérations thread-safe.
ThreadPool Affiche des informations sur le pool de threads managé, y compris le nombre de demandes de tâches dans la file d'attente, le nombre de threads de port de terminaison, et le nombre de minuteries.
Threads (clrthreads) [-live] [-special] Affiche tous les threads managés dans le processus.

La commande Threads affiche l’ID abrégé du débogueur, l’ID de thread du CLR et l’ID de thread du système d’exploitation. Par ailleurs, la commande Threads affiche une colonne Domain qui indique le domaine d’application dans lequel un thread s’exécute, une colonne APT qui affiche le mode COM cloisonné, et une colonne Exception qui affiche la dernière exception levée dans le thread.

L’option -live affiche les threads associés à un thread actif.

L’option -special affiche tous les threads spéciaux créés par le CLR. Les threads spéciaux incluent les threads du garbage collection (simultané et garbage collection du serveur), les threads d'assistance du débogueur, les threads finaliseurs, les threads Unload AppDomain et les threads de minuterie Threadpool.
Champ valeur de l’état ThreadState < > Affiche l'état du thread. Le paramètre value est la valeur du champ State dans la sortie du rapport Threads.
Token2EE<module name><token> Convertit le jeton de métadonnées spécifié dans le module spécifié en structure MethodTable ou MethodDesc.

Vous pouvez passer * comme paramètre de nom de module pour rechercher le mappage de ce jeton dans chaque module managé chargé. Vous pouvez également passer le nom du débogueur pour un module, tel que mscorlib ou image00400000.
U [-gcinfo] [-ehinfo] [-n] <MethodDesc address> | <Code address> Affiche un code machine annoté d'une méthode managée spécifié par un pointeur de structure MethodDesc pour la méthode ou par une adresse de code dans le corps de la méthode. La commande U affiche l’intégralité de la méthode du début à la fin, avec les annotations qui convertissent les jetons de métadonnées en noms.

L’option -gcinfo permet à la commande U d’afficher la structure GCInfo pour la méthode.

L’option -ehinfo affiche des informations sur les exceptions pour la méthode. Vous pouvez également obtenir ces informations avec la commande EHInfo.

L’option -n désactive l’affichage des noms de fichier source et des numéros de ligne. Si l'option SYMOPT_LOAD_LINES est spécifiée sur le débogueur, SOS recherche les symboles pour chaque frame managé et, s'il les trouve, affiche le nom de fichier source et le numéro de ligne correspondants. Vous pouvez spécifier l’option -n pour désactiver ce comportement.
VerifyHeap Vérifie le tas de récupérateur de mémoire pour rechercher des signes d'altération et affiche toutes les erreurs trouvées.

Les altérations du tas peuvent être provoquées par des appels de code construits de manière incorrecte.
VerifyObj<object address> Vérifie l’objet passé comme argument à la recherche de signes d’altération. Prise en charge uniquement sur Windows.
VMMap Parcourt l'espace d'adressage virtuel et affiche le type de protection appliqué à chaque région. Prise en charge uniquement avec Windbg.
VMStat Fournit un résumé de l’espace d’adressage virtuel, classé par type de protection appliqué à cette mémoire (libre, réservé, validé, privé, mappé, image). La colonne TOTAL affiche le résultat de la colonne MOYENNE multipliée par la colonne COMPTE BLQ. Prise en charge uniquement avec Windbg.

Dotnet-Dump

Pour obtenir la liste des commandes SOS disponibles avec dotnet-dump analyze, consultez dotnet-dump.

Débogueur Windows

Vous pouvez également utiliser l’extension de débogage SOS en la chargeant dans le débogueur WinDbg/dbg et en exécutant des commandes dans le débogueur Windows. Les commandes SOS peuvent être utilisées sur des processus en direct ou des images mémoire.

Windbg doit charger automatiquement l’extension SOS chaque fois que le processus en cours de débogage contient le runtime .NET (coreclr.dll ou libcoreclr.so).

Débogueur LLDB

Pour obtenir des instructions sur la configuration de SOS pour LLDB, consultez dotnet-sos. Les commandes SOS peuvent être utilisées sur des processus en direct ou des images mémoire.

Par défaut, vous pouvez accéder à toutes les commandes SOS en entrant : sos [command_name]. Toutefois, un alias a été attribué à toutes les commandes courantes pour vous éviter de devoir utiliser le préfixe sos :

Commande Fonction
analyzeoom Affiche les informations pour le dernier OOM qui s’est produit sur une requête d’allocation au tas GC.
bpmd Crée un point d'arrêt sur la méthode managée spécifiée dans le module spécifié.
clrmodules Répertorie les modules managés dans le processus.
clrstack Fournit uniquement une trace de la pile du code managé.
clrthreads Répertorie les threads managés en cours d’exécution.
clru Affiche un désassemblage annoté d’une méthode managée.
dbgout Active/désactive (-off) la journalisation SOS interne.
dso Affiche tous les objets managés recherchés dans les limites de la pile actuelle.
dumpalc Affiche des détails sur un AssemblyLoadContext pouvant être collecté sur lequel l’objet spécifié est chargé.
dumparray Affiche des détails sur un tableau managé.
dumpasync Affiche des informations sur les machines à états asynchrones sur le tas GC.
dumpassembly Affiche des détails sur un assembly.
dumpclass Affiche des informations sur la structure EEClass à l'adresse spécifiée.
dumpconcurrentdictionary Affiche le contenu du dictionnaire simultané.
dumpconcurrentqueue Affiche le contenu de file d’attente simultané.
dumpdelegate Affiche des informations sur un délégué.
dumpdomain Affiche des informations sur tous les assemblys au sein de tous les AppDomains ou de l’assembly spécifié.
dumpgcdata Affiche des informations sur les données GC.
dumpgen Affiche le contenu du tas pour la génération spécifiée.
dumpheap Affiche des informations sur le tas récupéré par le récupérateur de mémoire et des statistiques de collection concernant les objets.
dumpil Affiche le langage intermédiaire commun (CIL) associé à une méthode managée.
dumplog Écrit le contenu d'un journal de contrainte en mémoire dans le fichier spécifié.
dumpmd Affiche des informations sur la structure MethodDesc à l'adresse spécifiée.
dumpmodule Affiche des informations sur le module à l'adresse spécifiée.
dumpmt Affiche des informations sur la table de méthodes à l'adresse spécifiée.
dumpobj Affiche des informations sur l’objet à l’adresse spécifiée.
dumpruntimetypes Recherche tous les objets System.RuntimeType dans le tas GC et imprime le nom du type et la MethodTable auxquels ils font également référence.
dumpsig Vide la signature d’une méthode ou d’un champ spécifié par <sigaddr> <moduleaddr>.
dumpsigelem Vide un élément unique d'un objet de signature.
dumpstack Affiche une trace de pile native et managée.
dumpstackobjects Affiche tous les objets managés recherchés dans les limites de la pile actuelle.
dumpvc Affiche des informations sur les champs d’une classe de valeur.
eeheap Affiche des informations sur la mémoire du processus consommée par les structures de données internes du runtime.
eestack S’exécute dumpstack sur tous les threads du processus.
eeversion Affiche des informations sur les versions du runtime et de SOS.
ehinfo Affiche les blocs de gestion des exceptions dans une méthode JIT.
finalizequeue Affiche tous les objets enregistrés pour la finalisation.
findappdomain Tente de résoudre l’AppDomain d’un objet GC.
findroots Recherche et affiche les racines des objets dans les collections GC.
gchandles Affiche des statistiques sur les handles du récupérateur de mémoire dans le processus.
gcheapstat Affiche des statistiques sur le récupérateur de mémoire.
gcinfo Affiche l’encodage GC JIT pour une méthode.
gcroot Affiche des informations sur les références (ou racines) à l’objet à l’adresse spécifiée.
gcwhere Affiche l’emplacement dans le tas GC de l’adresse spécifiée.
histclear Libère toutes les ressources utilisées par la famille de commandes Hist.
histinit Initialise les structures SOS du journal de contrainte enregistré dans l’élément débogué.
histobj Examine tous les enregistrements de réadressage du journal de contrainte et affiche la chaîne des réadressages de garbage collection qui ont pu mener à l’adresse passée comme un argument.
histobjfind Affiche toutes les entrées de journal qui référencent l’objet à l’adresse spécifiée.
histroot Affiche les informations liées aux promotions et aux réadressages de la racine spécifiée.
histstats Affiche les statistiques du journal de contrainte.
ip2md Affiche la structure MethodDesc à l'adresse spécifiée dans le code compilé juste-à-temps (JIT).
listnearobj Affiche l’objet qui précède et succède l’adresse spécifiée.
loadsymbols Charge les symboles du module .NET natif.
logging Active/désactive la journalisation SOS interne.
name2ee Affiche les structures MethodTable et EEClass pour le type ou la méthode spécifié dans le module spécifié.
objsize Affiche la taille de l'objet spécifié.
parallelstacks Affiche la pile des threads fusionnés de la même façon que le panneau « Piles parallèles » de Visual Studio.
pathto Affiche le chemin d’accès GC de <root> à <target>.
pe Affiche et met en forme les champs de tous les objets dérivés de la classe Exception à l'adresse spécifiée.
printexception Affiche et met en forme les champs de tous les objets dérivés de la classe Exception à l'adresse spécifiée.
runtimes Répertorie les runtimes dans la cible ou modifie le runtime par défaut.
stoponcatch Le processus cible s'interrompt si une exception gérée est détectée lors de l'exécution.
setclrpath Définit le chemin d’accès pour charger des fichiers dac/dbi coreclr. setclrpath <path>.
sethostruntime Définit ou affiche le répertoire du runtime .NET à utiliser pour exécuter du code managé dans SOS.
setsymbolserver Active la prise en charge du serveur de symboles.
setsostid Définit l’index actuel tid/thread du système d’exploitation plutôt que celui fourni par lldb. setsostid <tid> <index>.
sos Exécute différentes commandes de débogage coreclr. Utilisez la syntaxe sos <command-name> <args>. Pour plus d’informations, consultez « soshelp ».
soshelp Affiche toutes les commandes disponibles lorsque aucun paramètre n'est spécifié ou affiche des informations d'aide détaillées sur la commande spécifiée : soshelp <command>.
syncblk Affiche des informations sur le conteneur syncBlock.
taskstate Affiche un état de tâche dans un format lisible par l’utilisateur.
threadpool Affiche des informations sur le pool de threads d’exécution.
threadpoolqueue Affiche les éléments de travail du pool de threads mis en file d’attente.
threadstate Pretty imprime la signification d’un état de threads.
timerinfo Affiche des informations sur les minuteurs en cours d’exécution.
token2ee Affiche la structure MethodTable et la structure MethodDesc pour le jeton et le module spécifiés.
traverseheap Écrit les informations du tas dans un dans un format compris par le profileur CLR.
verifyheap Vérifie le tas GC pour détecter les signes d’altération.
verifyobj Vérifie l’objet passé comme argument à la recherche de signes d’altération.

Exemple d’utilisation de Windbg/cdb

Commande Description
!dumparray -start 2 -length 5 -details 00ad28d0 Affiche le contenu d’un tableau à l’adresse 00ad28d0. L'affichage démarre à partir du deuxième élément et se poursuit avec les cinq éléments suivants.
!dumpassembly 1ca248 Affiche le contenu d’un assembly à l’adresse 1ca248.
!dumpheap Affiche des informations sur le tas du récupérateur de mémoire.
!DumpLog Écrit le contenu du journal de contrainte en mémoire dans un fichier appelé StressLog.txt (par défaut) dans le répertoire actif.
!dumpmd 902f40 Affiche la structure MethodDesc à l’adresse 902f40.
!dumpmodule 1caa50 Affiche des informations sur un module à l’adresse 1caa50.
!DumpObj a79d40 Affiche des informations sur un objet à l’adresse a79d40.
!DumpVC 0090320c 00a79d9c Affiche les champs d'une classe de valeur à l'adresse 00a79d9c, à l'aide de la table de méthodes à l'adresse 0090320c.
!eeheap -gc Affiche la mémoire du processus utilisée par le récupérateur de mémoire.
!finalizequeue Affiche tous les objets planifiés pour la finalisation.
!findappdomain 00a79d98 Détermine le domaine d'application d'un objet à l'adresse 00a79d98.
!gcinfo 5b68dbb8 Affiche tous les handles du récupérateur de mémoire dans le processus actuel.
!name2ee unittest.exe MainClass.Main Affiche les structures MethodTable et EEClass pour la méthode Main, dans la classe MainClass du module unittest.exe.
!token2ee unittest.exe 02000003 Affiche des informations sur le jeton de métadonnées à l'adresse 02000003 dans le module unittest.exe.

Exemple d’utilisation de LLDB

Commande Description
dumparray -start 2 -length 5 -details 00ad28d0 Affiche le contenu d’un tableau à l’adresse 00ad28d0. L'affichage démarre à partir du deuxième élément et se poursuit avec les cinq éléments suivants.
dumpassembly 1ca248 Affiche le contenu d’un assembly à l’adresse 1ca248.
dumpheap Affiche des informations sur le tas du récupérateur de mémoire.
dumplog Écrit le contenu du journal de contrainte en mémoire dans un fichier appelé StressLog.txt (par défaut) dans le répertoire actif.
dumpmd 902f40 Affiche la structure MethodDesc à l’adresse 902f40.
dumpmodule 1caa50 Affiche des informations sur un module à l’adresse 1caa50.
dumpobj a79d40 Affiche des informations sur un objet à l’adresse a79d40.
dumpvc 0090320c 00a79d9c Affiche les champs d'une classe de valeur à l'adresse 00a79d9c, à l'aide de la table de méthodes à l'adresse 0090320c.
eeheap -gc Affiche la mémoire du processus utilisée par le récupérateur de mémoire.
findappdomain 00a79d98 Détermine le domaine d'application d'un objet à l'adresse 00a79d98.
gcinfo 5b68dbb8 Affiche tous les handles du récupérateur de mémoire dans le processus actuel.
name2ee unittest.exe MainClass.Main Affiche les structures MethodTable et EEClass pour la méthode Main, dans la classe MainClass du module unittest.exe.
token2ee unittest.exe 02000003 Affiche des informations sur le jeton de métadonnées à l'adresse 02000003 dans le module unittest.exe.
clrthreads Affiche les threads managés.

Voir aussi