Partager via


Extension de débogage SOS (SOS.dll)

L'extension de débogage SOS (SOS.dll) vous aide à déboguer des programmes managés dans le débogueur WinDbg.exe et dans Visual Studio en fournissant des informations sur l'environnement interne du CLR (Common Language Runtime).

![command] [options] 

Commandes

Commande Description

BPMD [<module name> <method name>] [-md <MethodDesc>]

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.

CLRStack [-a] [-l] [-p]

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. Étant donné que l'extension de débogage SOS ne peut pas récupérer les noms locaux, la sortie pour les noms locaux est au format <local address> = <value>.

L'option -a (tout) est un raccourci pour -l et -p combinés.

L'extension de débogage SOS n'affiche pas de frames de transition sur les plateformes x64 et IA-64.

COMState

Répertorie le modèle Apartment COM pour chaque thread et un pointeur Context, si disponible.

DumpArray [-start <startIndex>] [-length <length>] [-details] [-nofields] <array object address>

- ou -

DA [-start <startIndex>] [-length <length>] [-detail] [-nofields] array object address>

Examine les éléments d'un objet de 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 -detail 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 lorsque l'option -detail est spécifiée.

DumpAssembly <Assembly address>

Affiche des informations sur 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 statique mais pas les valeurs de champ non statique.

Utilisez les commandes DumpMT, DumpObj, Name2EE ou Token2EE pour obtenir une adresse de structure EEClass.

DumpDomain [<Domain address>]

Répertorie chaque objet Assembly chargé dans l'adresse d'objet AppDomain spécifiée. En cas d'appel sans paramètres, la commande DumpDomain répertorie tous les objets AppDomain dans un processus.

DumpHeap [-stat] [-min <size>][-max <size>] [-thinlock] [-mt <MethodTable address>] [-type <partial type name>][start [end]]

Affiche des informations sur le tas récupéré par le garbage collector et des statistiques de collection sur les objets.

La commande DumpHeap affiche un avertissement si elle détecte une fragmentation excessive dans le tas de garbage collector.

L'option -stat restreint la sortie vers le résumé de type statistique.

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

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

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

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 est une correspondance de 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 [<DynamicMethod address>] [<DynamicMethodDesc address>] [<MethodDesc address>]

Affiche le langage intermédiaire (IL) associé à une méthode managée.

Notez que l'IL dynamique est émis différemment de l'IL chargé à partir d'un assembly. L'IL dynamique fait référence aux objets d'un tableau d'objets managés plutôt qu'aux jetons de métadonnées.

DumpLog [<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 actuel.

Le Common Language Runtime fournit un journal de contrainte en mémoire qui vous aide à diagnostiquer les échecs de contrainte. Le journal vous permet de diagnostiquer les échecs sans verrous ou 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

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. Lorsque l'option -MD est spécifiée, une liste de toutes les méthodes définies avec l'objet apparaît.

Chaque objet managé contient un pointeur de table de méthodes.

DumpMethodSig <sigaddr> <moduleaddr>

Affiche des informations sur une structure MethodSig à l'adresse spécifiée.

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 les commandes DumpDomain ou DumpAssembly pour récupérer l'adresse d'un module.

DumpObj <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.

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

DumpRuntimeTypes

Affiche les objets de type au moment de l'exécution dans le tas de garbage collector et répertorie les noms de types et les tables de méthodes associés.

DumpStack [-EE] [top stack [bottom stack]]

Affiche une trace de la pile.

Lorsque 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.

Sur les plateformes x86, la commande DumpStack crée une trace de la pile détaillée.

Sur les plateformes x64 et IA-64, la commande DumpStack reproduit la commande K du débogueur. Les paramètres top et bottom sont ignorés sur les plateformes x64 et IA-64.

DumpSig <sigaddr> <moduleaddr>

Affiche des informations sur une structure Sig à l'adresse spécifiée.

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 statique d'un champ d'objet.

Utilisez la commande DumpStackObject avec les commandes de traçage de la pile, telles que la commande K et la commande CLRStack, pour déterminer les valeurs des variables locales et des paramètres.

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 Common Language Runtime.

Les options -gc et -loader limitent la sortie de cette commande vers les structures de données du garbage collector ou du chargeur.

Les informations pour le garbage collector 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 EEHeap -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 vers les types de threads suivants :

  1. Threads avec un verrou.

  2. Threads bloqués pour permettre un garbage collection.

  3. Threads se trouvant actuellement dans le code managé.

EEVersion

Affiche la version du Common Language Runtime.

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).

FinalizeQueue [-detail]

Affiche tous les objets enregistrés pour la finalisation.

L'option -detail affiche des informations supplémentaires sur tout SyncBlocks en attente de nettoyage, ainsi que des informations supplémentaires sur tout RuntimeCallableWrappers (RCW) en attente de nettoyage. Les deux structures de données sont mises en cache et nettoyées par le thread finaliseur.

FindAppDomain <Object address>

Détermine le domaine d'application d'un objet à l'adresse spécifiée.

GCHandles [-perdomain]

Affiche des statistiques sur les handles du garbage collector dans le processus.

Les statistiques sont réorganisées par domaine d'application en passant l'option -perdomain.

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

GCHandleLeaks

Recherche dans la mémoire des références à des handles forts et épinglés du garbage collector 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.

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] <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 pour les handles d'autres objets et les 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 garbage collector et aux objets accessibles.

help [<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.

IP2MD <Code address>

Affiche la structure MethodDesc à l'adresse spécifiée dans le code compilé juste-à-temps (JIT).

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 fonctionnalité MinidumpMode a la valeur 0.

Les minidumps créés avec la commande .dump /m ou .dump ont des données spécifiques au 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 sont uniquement mappées partiellement. Cette option vous empêche d'exécuter des commandes potentiellement dangereuses dans les minidumps.

Name2EE <module name> <type or method name>

- ou -

Name2EE <module name>!<type or method name>

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 du MSIL Disassembler (Ildasm.exe). Vous pouvez également passer * en tant que paramètre module name 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, tel que 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>]

Affiche la taille de l'objet spécifié. En l'absence de paramètres, la commande ObjSize affiche la taille de tous les objets trouvés dans les threads managés, ainsi que tous les handles du garbage collector dans le processus, et additionne la taille de tous les objets pointés par ces handles. La commande ObjSize inclut la taille de tous les objets enfants en plus du parent.

PrintException [-nested] [<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.

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.

RCWCleanupList <RCWCleanupList address>

Affiche la liste des wrappers RCW à l'adresse spécifiée qui sont en attente de nettoyage.

SaveModule <Base address> <Filename>

Écrit une image, chargée dans la mémoire à l'adresse spécifiée, dans le fichier spécifié.

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, ainsi que chaque exception dérivée de l'exception spécifiée.

SyncBlk [-all | <syncblk number>]

Affiche la structure SyncBlock spécifiée ou l'ensemble des structures SyncBlock. Si vous ne passez pas d'arguments, 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 d'interopérabilité COM, 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.

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 * pour le paramètre module name 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.

Threads [-live] [-special]

Affiche tous les threads managés dans le processus.

La commande Threads affiche l'ID de raccourci du débogueur, l'ID du thread du Common Language Runtime et l'ID du thread du système d'exploitation. En outre, la commande Threads affiche une colonne Domaine qui indique le domaine d'application dans lequel un thread est exécuté, une colonne APT qui affiche le mode Apartment COM 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 (GC) (GC simultané et GC de serveur), les threads d'assistance du débogueur, les threads finaliseurs, les threads Unload AppDomain et les threads de minuterie Threadpool.

TraverseHeap [-xml] <filename>

Écrit les informations du tas dans le fichier spécifié dans un format compris par le profileur CLR. Lorsque l'option -xml est spécifiée, la commande TraverseHeap applique le format XML au fichier.

Vous pouvez télécharger le profileur CLR à partir de l'adresse : https://www.microsoft.com/downloads/details.aspx?familyid=86CE6052-D7F4-4AEB-9B7A-94635BEEBDDA

U [-gcinfo] [-ehinfo] <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 entraîne l'affichage de la structure GCInfo pour la méthode par la commande U.

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

VerifyHeap

Vérifie le tas de garbage collector 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 plateforme construits de manière incorrecte.

VMMap

Parcourt l'espace d'adressage virtuel et affiche le type de protection appliqué à chaque région.

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.

Notes

Utilisez l'extension de débogage SOS en la chargeant dans le débogueur WinDbg.exe, ou dans Visual Studio 2005 ou une version antérieure. Vous pouvez exécuter les commandes dans WinDgb.exe ou dans la fenêtre Exécution de Visual Studio.

L'extension de débogage SOS vous permet d'afficher des informations sur l'exécution du code au sein du CLR. Par exemple, vous pouvez utiliser l'extension de débogage SOS pour afficher des informations sur le tas managé, rechercher des altérations du tas, afficher les types de données internes utilisés par le runtime et afficher des informations sur l'ensemble du code managé exécuté au sein du runtime.

Chargement de l'extension de débogage SOS

Pour charger l'extension de débogage SOS dans le débogueur WinDbg.exe, exécutez la commande suivante dans l'outil ; pour charger l'extension de débogage SOS dans Visual Studio, exécutez la commande suivante dans la fenêtre Exécution lors du débogage :

.loadby sos

Vous devez activer le débogage non managé dans les paramètres du projet de votre solution avant de pouvoir charger l'extension de débogage SOS. Pour certains langages, le débogage non managé est désactivé par défaut.

Remarque Pour afficher la fenêtre Exécution dans Visual Studio 2005, cliquez sur le menu Déboguer, sur le menu Windows, puis sur l'option Exécution. Vous pouvez également ouvrir la fenêtre Exécution dans Visual Studio en sélectionnant CTRL-ALT-I.

WinDbg.exe et Visual Studio utilisent une version de SOS.dll qui correspond à la version de Mscorwks.dll actuellement utilisée. Dans les versions 1.1 et 2.0 du .NET Framework, SOS.dll est installé dans le même répertoire que Mscorwks.dll. Par défaut, vous devez utiliser la version de SOS.dll qui correspond à la version actuelle de Mscorwks.dll.

Pour utiliser un fichier dump créé sur un autre ordinateur, vérifiez que le fichier Mscorwks.dll fourni avec cette installation se trouve dans votre chemin d'accès aux symboles, et chargez la version correspondante de SOS.dll.

Pour charger une version spécifique de SOS.dll, tapez la commande suivante dans le débogueur Windows :

.load <full path to sos.dll>

Exemples

La commande suivante 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.

!dumparray -start 2 -length 5 -detail 00ad28d0 

La commande suivante affiche le contenu d'un assembly à l'adresse 1ca248.

!dumpassembly 1ca248

La commande suivante affiche des informations sur le tas de garbage collector.

!dumpheap

La commande suivante écrit le contenu du journal de contrainte en mémoire dans un fichier appelé Stresslog.txt dans le répertoire actuel.

!DumpLog

La commande suivante affiche la structure MethodDesc à l'adresse 902f40.

!dumpmd 902f40

La commande suivante affiche des informations sur un module à l'adresse 1caa50.

!dumpmodule 1caa50

La commande suivante affiche des informations sur un objet à l'adresse a79d40.

!DumpObj a79d40

La commande suivante affiche les champs d'une classe de valeur à l'adresse 00a79d9c, à l'aide de la table de méthodes aux adresses 0090320c.

!DumpVC 0090320c 00a79d9c

La commande suivante affiche la mémoire du processus utilisée par le garbage collector.

!eeheap -gc

La commande suivante affiche tous les objets planifiés pour la finalisation.

!finalizequeue

La commande suivante détermine le domaine d'application d'un objet à l'adresse 00a79d98.

!findappdomain 00a79d98

La commande suivante affiche tous les handles du garbage collector dans le processus actuel.

!gcinfo 5b68dbb8 

La commande suivante affiche les structures MethodTable et EEClass pour la méthode Main, dans la classe MainClass, dans le module unittest.exe.

!name2ee unittest.exe MainClass.Main

La commande suivante affiche des informations sur le jeton de métadonnées à l'adresse 02000003 dans le module unittest.exe.

!token2ee unittest.exe 02000003

Voir aussi

Référence

Outils du .NET Framework
Invite de commandes du Kit de développement SDK