Partager via


SOS.dll (Extension de débogage SOS)

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). Cet outil requiert l'activation du débogage non managé pour votre projet. Vous pouvez également utiliser l'extension de débogage SOS avec le débogueur Windows (WinDbg.exe).

Cet outil est installé automatiquement avec Visual Studio et avec le Kit de développement logiciel Windows. Pour exécuter l'outil, nous vous recommandons d'utiliser l'invite de commandes Visual Studio ou l'invite de commandes du Kit de développement logiciel (l'interpréteur de commandes CMD). Ces utilitaires vous permettent d'exécuter l'outil facilement, sans naviguer jusqu'au dossier d'installation. Pour plus d'informations, consultez Invites de commandes Visual Studio e t Kit de développement logiciel (SDK) Windows.

  • Si Visual Studio est installé sur votre ordinateur : dans la barre des tâches, cliquez sur le bouton Start, All Programs, Visual Studio, sur Visual Studio Tools, puis sur Visual Studio Command Prompt.

    ou

    Si vous avez le Kit de développement logiciel Windows installé sur votre ordinateur : Dans la barre des tâches, cliquez sur Start, All Programs, le dossier correspondant au Kit de développement logiciel, puis sur Command Prompt (ou CMD Shell).

  • À l'invite de commandes, tapez ce qui suit :

![command] [options] 

Commandes

Commande

Description

AnalyzeOOM (ao)

Affiche les informations pour le dernier OOM qui s'est produit sur une demande d'allocation au tas de garbage collection. (Dans le garbage collection de serveur, il affiche OOM, le cas échéant, sur chaque tas de garbage collection.)

BPMD [-nofuturemodule] [<nom du module> <nom de la méthode>] [-md <MethodDesc>] -list -clear <numéro de point d'arrêt en attente> -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 chargé particulier. 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 de la liste.

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

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 <adresse locale> = <valeur>.

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

  • 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ée 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'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 cloisonné COM pour chaque thread et un pointeur Context, si disponible.

DumpArray [-start <startIndex>] [-length <longueur>] [-details] [-nofields] <adresse d'objet tableau>

ou

DA [-start <startIndex>] [-length <longueur>] [-detail] [-nofields] adresse d'objet tableau>

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 -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 lorsque l'option -detail est spécifiée.

DumpAssembly <adresse d'assembly>

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 <adresse EEClass>

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 la commande DumpMT, DumpObj, Name2EE ou Token2EE pour obtenir une adresse de structure EEClass.

DumpDomain [<adresse de domaine>]

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] [-strings] [-short] [-min <taille>] [-max <taille>] [-thinlock] [-startAtLowerBound] [-mt <adresse MethodTable>] [-type <nom de type partiel>][début [fin]]

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 -strings restreint la sortie à une valeur de chaîne type 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 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 -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 DumpHeap à 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 un 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 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 <objet DynamicMethod managé> | <pointeur DynamicMethodDesc> | <pointeur MethodDesc>

Affiche le Microsoft Intermediate Language (MSIL) associé à une méthode managée.

Notez que le langage MSIL dynamique est émis différemment du langage MSIL chargé à partir d'un assembly. Le langage MSIL 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 des 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 <adresse MethodDesc>

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] <adresse MethodTable>

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] <adresse de module>

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] <adresse d'objet>

ou

DO <adresse d'objet>

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.

L'option -nofields empêche l'affichage des champs de l'objet, ce qui est utile pour des objets comme les objets String.

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] [-n] [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.

  • 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ée 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.

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

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

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 a été endommagée, vous pouvez utiliser DumpSigElem pour lire ses parties valides.

DumpStackObjects [-verify] [top pile [bottom pile]]

ou

DSO [-verify] [top pile [bottom pile]]

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 <adresse MethodTable> <Adresse>

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 -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 :

  • Threads avec un verrou.

  • Threads bloqués pour permettre un garbage collection.

  • Threads se trouvant actuellement dans le code managé.

EEVersion

Affiche la version du Common Language Runtime.

EHInfo [<adresse MethodDesc>] [<Adresse de code>]

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

FAQ

Affiche des forums aux questions.

FinalizeQueue [-detail] | [-allReady] [-short]

Affiche tous les objets enregistrés pour la finalisation.

  • L'option -detail affiche des informations supplémentaires sur les SyncBlocks en attente de nettoyage, ainsi que des informations supplémentaires 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 être 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. S'il est utilisé conjointement à -allReady, il énumère tous les objets qui ont un finaliseur qui n'est plus enraciné. 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 <Adresse d'objet>

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 le programme 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 objet> de cette commande est utilisée après l'arrêt provoqué par -gen ou -gen any. À cet instant, le programme débogué est dans l'état correct pour que FindRoots identifie des racines pour les objets à partir des générations condamnées actuelles.

GCHandles [-perdomain]

Affiche des statistiques sur les handles du garbage collector 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 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 <adresse MethodDesc><adresse de code>

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] <Adresse d'objet>

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.

GCWhere <adresse d'objet>

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'affichée comme étant de 0 (zéro).

help [<commande>] [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 à propos des objets managés du tas de garbage collection qui n'est plus enraciné.

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 le programme 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.

HisttObjFind <obj_address>

Affiche toutes les entrées de journal qui référencent un objet à l'adresse spécifiée.

HistRoot <racine>

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 <Adresse de code>

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.

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 <nom de module> <nom de type ou de méthode>

ou

Name2EE <nom de module>!<nom de type ou de 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 du Ildasm.exe (Désassembleur MSIL). 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 nom de module 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 [<adresse d'objet>] | [-aggregate] [-stat]

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.

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. En utilisant !dumpheap -stat et !objsize -aggregate -stat, vous pouvez déterminer quels objets ne sont plus enracinés et diagnostiquer différents problèmes de mémoire.

PrintException [-nested] [-lines] [<adresse d'objet exception>]

ou

PE [-nested] [<Adresse d'objet exception>]

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.

RCWCleanupList <adresse RCWCleanupList>

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

SaveModule <Adresse de base> <Nom de fichier>

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

SOSFlush

Vide un cache SOS interne.

StopOnException [-derived] [-create | -create2] <Exception> <Numéro de pseudo-registre>

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 | <numéro syncblk>]

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

Token2EE <nom de module> <jeton>

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.

Threads [-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 de common language runtime et l'ID de thread de système d'exploitation. En outre, la commande Threads affiche une colonne Domaine qui indique le domaine d'application dans lequel un thread s'exécute, 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 (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.

ThreadState <Champ de valeur d'état>

Affiche l'état du thread. Le paramètre value est la valeur du champ State dans la sortie des rapports Threads.

Exemple :

    0:003> !Threads
    ThreadCount:      2
    UnstartedThread:  0
    BackgroundThread: 1
    PendingThread:    0
    DeadThread:       0
    Hosted Runtime:   no
                                          PreEmptive   GC Alloc           Lock
           ID OSID ThreadOBJ    State     GC       Context       Domain   Count APT Exception
       0    1  250 0019b068      a020 Disabled 02349668:02349fe8 0015def0     0 MTA
       2    2  944 001a6020      b220 Enabled  00000000:00000000 0015def0     0 MTA (Finalizer)
    0:003> !ThreadState b220
        Legal to Join
        Background
        CLR Owns
        CoInitialized
        In Multi Threaded Apartment

TraverseHeap [-xml] <nom de fichier>

É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 du Centre de téléchargement Microsoft.

U [-gcinfo] [-ehinfo] [-n] <adresse MethodDesc> | <adresse de code>

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.

  • 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ée 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 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 code non managé de manière incorrecte.

VerifyObj <adresse d'objet>

Vérifie l'objet passé comme un argument pour rechercher des signes d'altération.

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, également disponible à partir du site Web WDK and Developer Tools (page éventuellement en anglais) ou dans Visual Studio. Vous pouvez exécuter les commandes dans WinDgb.exe ou dans la fenêtre Immédiat de Visual Studio.

L'extension de débogage SOS vous permet d'afficher des informations sur l'exécution du code au sein du Common Language Runtime. 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 :

.loadby sos clr

Pour charger l'Extension de débogage SOS dans Visual Studio, exécutez la commande suivante dans la fenêtre Immédiat en cours de débogage :

.load SOS.dll

Si la commande réussit, elle retourne le message suivant dans la fenêtre Immédiat :

extension C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll loaded

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. Certaines plateformes n'autorisent pas le débogage simultané de code managé et de code non managé.

RemarqueRemarque

Pour afficher la fenêtre Immédiat dans Visual Studio, pointez sur Fenêtres dans le menu Déboguer, puis cliquez sur l'option Immédiat.Vous pouvez également ouvrir la fenêtre Immédiat dans Visual Studio en appuyant sur 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 (par défaut) dans le répertoire actif.

!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 à l'adresse 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

Invites de commandes Visual Studio e t Kit de développement logiciel (SDK) Windows

Autres ressources

Outils du .NET Framework

Historique des modifications

Date

Historique

Motif

Avril 2011

Informations supplémentaires sur l'utilisation des invites de commandes de Visual Studio et du Kit de développement logiciel (SDK) Windows.

Améliorations apportées aux informations.