Extensions du débogueur .NET
Les extensions du débogueur .NET vous permettent 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. Les extensions sont préinstallées avec Windbg et peuvent être téléchargées à utiliser avec LLDB. Vous pouvez utiliser les extensions du débogueur .NET pour :
- Collecter des informations sur le tas managé.
- Recherchez des corruptions de tas.
- Afficher les types de données internes utilisés par le runtime.
- Affichez des informations sur tout le code managé s’exécutant à l’intérieur du runtime.
Les extensions du débogueur .NET incluent des commandes de l’outil dotnet-sos existant
Syntaxe
Sous ventbg : ![command] [options]
Sous LLDB : 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 d’aide ou . L’aide de commande individuelle est disponible à l’aide de soshelp <command>
.
Commander | Description |
---|---|
bpmd [-nofuturemodule] [<nom de la méthode><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 à 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 (JIT) avant de créer un point d’arrêt. Vous pouvez gérer la liste des points d’arrêt en attente à l’aide des options -list, -clearet -clearall options : 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 différent de zéro, 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 zéro, 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 les points d’arrêt en attente de la liste. |
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] | Fournit une trace de pile de code managé uniquement. L’option -p affiche les arguments de la fonction managée. L’option -l affiche des informations sur les variables locales dans un cadre. Les extensions du débogueur .NET ne peuvent pas récupérer les noms locaux. La sortie des noms locaux est donc au format <adresse locale>=<valeur>. L’option -a est un raccourci pour -l et -p combinée. L’option -n désactive l’affichage des noms de fichiers sources et des numéros de ligne. Si le débogueur a l’option SYMOPT_LOAD_LINES spécifiée, SOS recherche les symboles de chaque frame managé et, si elle réussit, 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 mélangent avec les images managées et 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 les piles de tous les threads managés. |
COMState | Répertorie le modèle d’appartement COM pour chaque thread et un pointeur Context , le cas échéant. Cette commande est uniquement prise en charge sur Windows. |
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <adresse d’objet array> -ou- DA [-start<startIndex>] [-length<length>] [-details] [-nofields] > |
Examine les éléments d’un objet tableau. L’option -start spécifie l’index de départ auquel afficher les éléments. L’option -length spécifie le nombre d’éléments à afficher. L’option L’option -nofields empêche l’affichage des tableaux. Cette option est disponible uniquement lorsque l’option -details est spécifiée. |
DumpAsync (dumpasync ) [-mt<MethodTable address>] [-type<partial type name>] [-waiting] [-roots] | DumpAsync traverse le tas collecté par le garbage et recherche des objets représentant des ordinateurs d’état asynchrones créés lors du transfert de l’état d’une méthode asynchrone vers le tas. Cette commande reconnaît les ordinateurs d’état 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 d’ordinateur d’état asynchrone trouvé. Ces détails sont les suivants : - Ligne pour le type de l’objet machine d’état asynchrone, y compris son adresse MethodTable, son adresse d’objet, sa taille et son nom de type. - Ligne pour le nom du type d’ordinateur d’état tel qu’il est contenu dans l’objet. - Liste de chaque champ sur l’ordinateur d’état. - Ligne d’une continuation à partir de cet objet d’ordinateur d’état, si un ou plusieurs ont été inscrits. - Découverte des racines GC pour cet objet d’ordinateur d’état asynchrone. Pris en charge pour les applications AOT natives. |
adresse d’assembly DumpAssembly<> | 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 |
adresse EEClass<EEClass> | Affiche des informations sur la structure EEClass associée à un type.La commande DumpClass affiche les valeurs de champ statiques, mais n’affiche pas les valeurs de champ non statiques. Utilisez leDumpMT |
DumpDomain [<>d’adresse de domaine ] | Énumère chaque objet Assembly chargé dans l’adresse d’objet AppDomain spécifiée. Lorsqu’elle est appelée sans paramètre, la commande DumpDomain répertorie tous les objets AppDomain dans un processus. Étant donné que .NET (Core) n’a qu’un seul AppDomain, 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 collecté par le garbage et les statistiques de collecte sur les objets. La commande DumpHeap affiche un avertissement s’il détecte une fragmentation excessive dans le tas du garbage collector. L’option -stat limite la sortie au résumé du type statistique. L’option -strings limite la sortie à un résumé de la valeur de chaîne statistique. L’option -short limite la sortie à l’adresse de chaque objet. Cette commande vous permet de diriger facilement la sortie de la commande vers une autre commande de débogueur pour l’automatisation. L’option -min ignore les objets inférieurs au paramètre size , spécifiés en octets.L’option -max ignore les objets supérieurs au paramètre size , spécifiés en octets.L’option -thinlock signale ThinLocks. Pour plus d’informations, consultez la commande SyncBlk. L’option -startAtLowerBound force la marche du tas à commencer à la limite inférieure d’une plage d’adresses fournie. Pendant la phase de planification, le tas n’est souvent pas accessible en marche, car les objets sont déplacés. Cette option force DumpHeap à commencer sa marche à 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 objet incorrect pour rechercher manuellement la table de méthode suivante. Si le garbage collection est actuellement dans un appel à memcopy , vous pouvez également trouver l’adresse de l’objet suivant en ajoutant la taille à l’adresse de début, qui est fournie en tant que 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 l’adresse spécifiée.Le paramètre end cesse de répertorier à l’adresse spécifiée.Pris en charge pour les applications AOT natives. |
objet DumpIL<Managed DynamicMethod> | <pointeur DynamicMethodDesc> | <pointeur MethodDesc> | 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. |
DumpLock [--allthreads] [--waits] | Affiche des informations sur les objets System.Threading.Lock, tels que ceux détenus par des threads (par défaut) ou ceux qui sont attendus par des threads. |
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 défaillances de stress 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.Pris en charge pour les applications AOT natives. |
'adresse DumpMD<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 à partir d’une fonction managée. |
DumpMT [-MD] adresse MethodTable <> | Affiche des informations sur une table de méthode à l’adresse spécifiée. La spécification de l’option -MD affiche la liste de toutes les méthodes définies avec l’objet. Chaque objet managé contient un pointeur de table de méthode. |
DumpModule [-mt] adresse du 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 |
DumpObj [-nofields] <adresse d’objet> -ou- 'adresse d’objet DO<> |
Affiche des informations sur un objet à l’adresse spécifiée. La commande DumpObj affiche les champs, les informations de 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 sur les champs de type CLASS , car ils sont également des objets.L’option - nofields empêche l’affichage des champs de l’objet, il est utile pour les objets tels que String. |
DumpRuntimeTypes | Affiche les objets de type runtime dans le tas du garbage collector 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 pile. L’option top et bottom pour limiter les trames de pile affichées sur les plateformes x86.L’option -n désactive l’affichage des noms de fichiers sources et des numéros de ligne. Si le débogueur a l’option SYMOPT_LOAD_LINES spécifiée, SOS recherche les symboles de chaque frame managé et, si la réussite 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 seul élément 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 d’une certaine façon, vous pouvez utiliser DumpSigElem pour lire les parties valides de celui-ci. |
DumpStackObjects [-verify] [top stack [bottom stack]]-ou- DSO [-verify] [ top stack [bottom stack]] |
Affiche tous les objets managés trouvés dans les limites de la pile actuelle. L’option -verify valide chaque champ de CLASS non statique d’un champ d’objet.Utilisez la commande |
adresse DumpVC<MethodTable><Address> | Affiche des informations sur les champs d’une classe de valeur à l’adresse spécifiée. Le paramètre MethodTable |
EEHeap [-gc] [-loader] | Affiche des informations sur la mémoire du processus consommée par les structures de données d’exécution internes. Les options -gc et -load er limitent la sortie de cette commande aux structures de données garbage collector ou loader. Les informations du garbage collector répertorient les plages de chaque segment dans le tas managé. Si le pointeur se trouve dans une plage de segments donnée par -gc, le pointeur est un pointeur d’objet. |
EEStack [-short] [-EE] | Exécute la commande DumpStack sur tous les threads du processus. L’option Threads qui ont pris un verrou. Threads qui ont été bloqués afin d’autoriser un garbage collection. Threads actuellement en code managé. |
EHInfo [<>d’adresse MethodDesc ] [<Adresse du code>] | Affiche les blocs de gestion des exceptions dans une méthode spécifiée. Cette commande affiche les adresses de code et les décalages du bloc de clause (bloc try ) et du bloc de gestionnaire (bloc catch ). |
FAQ | Affiche les questions fréquemment posées. Non pris en charge dans dotnet-dump . |
FinaliseQueue [-detail] | [-allReady] [-short] | Affiche tous les objets inscrits pour la finalisation. L’option -detail affiche des informations supplémentaires sur les SyncBlocks qui doivent être nettoyées et toutes les RuntimeCallableWrappers (RCW) qui attendent le nettoyage. Ces deux structures de données sont mises en cache et nettoyées par le thread finaliseur lorsqu’elles s’exécutent.L’option -allReady affiche tous les objets qui sont prêts pour la finalisation, qu’ils soient déjà marqués par le garbage collection comme tel, ou qui seront marqués par le garbage collection suivant. Les objets qui se trouvent dans la liste « prêts pour la finalisation » sont des objets finalisables qui ne sont plus rootés. Cette option peut être coûteuse, car elle vérifie si tous les objets des files d’attente finalisables sont toujours enracinés.L’option -short limite la sortie à l’adresse de chaque objet. S’il est utilisé avec -allReady, il énumère tous les objets qui ont un finaliseur qui ne sont plus rootés. S’il est utilisé indépendamment, il répertorie tous les objets dans les files d’attente finalisables et « prêts pour la finalisation ». |
adresse de l’objet FindAppDomain<> | Détermine le domaine d’application d’un objet à l’adresse spécifiée. |
FindRoots-gen<N> | -gen any |<adresse d’objet> | Provoque l’arrêt du débogueur dans le débogueur 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 interrompre la collection suivante, vous devez réexécuter la commande. L’adresse d’objet |
GCHandles [-perdomain] | Affiche des statistiques sur les handles de garbage collector dans le processus. L’option -perdomain organise les statistiques par domaine d’application. Utilisez la commande GCHandles pour rechercher des fuites de mémoire causées par des fuites de garbage collector. Par exemple, une fuite de mémoire se produit lorsque le code conserve un grand tableau, car un handle de récupérateur de mémoire fort pointe toujours vers celui-ci, et le handle est ignoré sans le libérer. Prise en charge uniquement sur Windows. |
GCHandle Leak | Recherche dans la mémoire toutes les références aux handles de garbage collector forts et épinglés dans le processus et affiche les résultats. Si un handle est trouvé, la commande GCHandle Leak affiche l’adresse de la référence. Si un handle est introuvable en mémoire, cette commande affiche une notification. Prise en charge uniquement sur Windows. |
adresse GCInfo<, méthodeDesc><adresse de code> | Affiche les données qui indiquent quand les registres ou les emplacements de pile contiennent des objets managés. Si un garbage collection se produit, le collecteur doit connaître les emplacements des références aux objets afin qu’il puisse les mettre à jour avec de nouvelles valeurs de pointeur d’objet. |
GCRoot [-nostacks] [-all] <'adresse de l’objet> | Affiche des informations sur les références (ou racines) à un objet à l’adresse spécifiée. La commande GCRoot examine l’intégralité du tas managé et la table de handles dans d’autres objets et handles sur la pile. Chaque pile est ensuite recherchée pour rechercher des pointeurs vers des objets, et la file d’attente du finaliseur est également recherchée. Cette commande ne détermine pas si une racine de pile est valide ou est ignorée. Utilisez les commandes clrstack et U pour désassembler le cadre auquel appartient la valeur locale ou d’argument afin de déterminer si la racine de pile est toujours utilisée. L’option -nostacks limite la recherche aux handles de garbage collector et aux objets accessibles. L’option -all force l’affichage de toutes les racines au lieu des racines uniques. |
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 est affichée sous la forme 0 (zéro). |
Aide (soshelp) [<commande>] [faq ] |
Affiche toutes les commandes disponibles lorsqu’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 des réponses aux questions fréquemment posées. |
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 rooté. Prise en charge uniquement sur Windows. |
HistClear | Libère toutes les ressources utilisées par la famille de commandes Hist .En règle générale, vous n’avez pas besoin d’appeler explicitement HistClear , car chaque HistInit nettoie les ressources précédentes. |
HistInit | Initialise les structures SOS à partir du journal de contrainte enregistré dans le débogage. |
HistObj<obj_address> | Examine tous les enregistrements de réaffectation du journal de contrainte et affiche la chaîne de réaffectations de garbage collection qui ont peut-être conduit à l’adresse passée en tant qu’argument. |
HistObjFind<obj_address> | Affiche toutes les entrées de journal qui font référence à un objet à l’adresse spécifiée. |
Affiche les informations relatives aux promotions et aux réinstallations de la racine spécifiée. La valeur racine peut être utilisée pour suivre le déplacement d’un objet via les garbage collections. |
|
IP2MD (ip2md) <adresse de code> | Affiche la structure MethodDesc à l’adresse spécifiée dans le code qui a été compilée par JIT. |
listNearObj (lno) <obj_address> | Affiche les objets précédents et suivant l’adresse spécifiée. La commande recherche l’adresse dans le tas de garbage collection qui ressemble à un début valide d’un objet managé (basé sur une table de méthode valide) et à l’objet suivant l’adresse de l’argument. Prise en charge uniquement sur Windows. |
MinidumpMode [0] [1] | Empêche l’exécution de commandes non sécurisées lors de l’utilisation d’un minidump. Passez 0 pour désactiver cette fonctionnalité ou 1 pour activer cette fonctionnalité. Par défaut, la valeur MinidumpMode est définie sur 0. Les minidumps créés avec la commande .dump /m ou commande .dump ont des données clR limitées et vous permettent d’exécuter uniquement un sous-ensemble de commandes SOS correctement. Certaines commandes peuvent échouer avec des erreurs inattendues, car les zones de mémoire requises ne sont pas mappées ou ne sont que partiellement mappées. Cette option vous protège contre l’exécution de commandes non sécurisées contre les minidumps. Uniquement pris en charge avec Windbg. |
Name2EE (name2ee) <nom de module><type ou nom de méthode> -ou- Name2EE<nom du module>!<type ou nom de méthode> |
Affiche la structure MethodTable et EEClass structure 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 approprié, parcourez le module à l’aide du 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 nom module paramètre peut également être le nom du débogueur d’un module, tel que mscorlib ou image00400000 .Cette commande prend en charge la syntaxe du débogueur Windows de < module >! <type >. Le type doit être qualifié complet. |
ObjSize [<'adresse de l’objet>] | [-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 sur les threads managés, affiche tous les handles de garbage collector dans le processus et totalise la taille des 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 toujours rootés. En utilisant !dumpheap -stat et !objsize -aggregate -stat, vous pouvez déterminer quels objets ne sont plus rootés et diagnostiquer différents problèmes de mémoire. Prise en charge uniquement sur Windows. |
printException [-imbriqué] [-lines] [ adresse de l’objet exception<>] -ou- PE [-imbriqué] [<'adresse de l’objet Exception>] |
Affiche et met en forme les champs d’un objet dérivé de la classe Exception à l’adresse spécifiée. Si vous ne spécifiez pas d’adresse, la commande PrintException L’option -imbriquée affiche des détails sur les objets d’exception imbriqués. L’option -lines affiche les informations sources, le cas échéant. Vous pouvez utiliser cette commande pour mettre en forme et afficher le champ _stackTrace , qui est un tableau binaire. |
ProcInfo [-env] [-time] [-mem] | Affiche des variables d’environnement pour le processus, le temps processeur du noyau et les statistiques d’utilisation de la mémoire. Uniquement pris en charge avec Windbg. |
adresse RCWCleanupList<RCWCleanupList> | Affiche la liste des wrappers pouvant être appelé au moment de l’exécution à l’adresse spécifiée qui attend le nettoyage. Uniquement pris en charge avec Windbg. |
adresse de base SaveModule<><nom de fichier> | Écrit une image, chargée en mémoire à l’adresse spécifiée, dans le fichier spécifié. Uniquement pris en charge 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). Le runtime doit être au moins version 2.1.0 ou ultérieure. S’il existe des espaces dans le répertoire, il doit être 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 fonctionne pas suffisamment pour 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 de symboles Microsoft public. 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. Peut être 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 téléchargements de 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><Numéro pseudo-registre> | Provoque l’arrêt du débogueur lorsque l’exception spécifiée est levée, mais pour continuer à s’exécuter lorsque d’autres exceptions sont levées. L’option -dérivée intercepte l’exception spécifiée et chaque exception qui dérive de l’exception spécifiée. Uniquement pris en charge avec Windbg. |
SyncBlk [-all | <syncblk number>] | Affiche la structure SyncBlock spécifiée ou toutes les structures SyncBlock . Si vous ne transmettez aucun argument, la commande SyncBlk affiche la structure SyncBlock correspondant aux objets appartenant à un thread.Une structure SyncBlock est un conteneur pour obtenir des informations supplémentaires qui n’ont pas besoin d’être créées pour chaque objet. Il 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és, notamment le nombre de demandes de travail dans la file d’attente, le nombre de threads de port d’achèvement et le nombre de minuteurs. |
threads (clrthreads) [-live] [-special] | Affiche tous les threads managés dans le processus. La commande Threads affiche l’ID de raccourci du débogueur, l’ID de thread CLR et l’ID de 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 s’exécute, une colonne APT qui affiche le mode appartement 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 des threads de garbage collection (dans le garbage collection simultané et serveur), des threads d’assistance du débogueur, des threads de finaliseur, AppDomain décharger des threads et des threads de minuteur de pool de threads. Pris en charge pour les applications AOT natives. |
champ de valeur d’état <ThreadState> | Affiche l’état du thread. Le paramètre value est la valeur du champ State dans la sortie de rapport Threads. |
token2EE<nom du module><jeton> | Transforme le jeton de métadonnées spécifié dans le module spécifié en structure MethodTable ou MethodDesc structure.Vous pouvez passer * pour le paramètre de nom du module pour trouver ce que ce jeton mappe 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] adresse <MethodDesc> | adresse de code <> | Affiche un désassemblement annoté d’une méthode managée spécifiée 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 de début à la fin, avec des annotations qui convertissent les jetons de métadonnées en noms.L’option -gcinfo entraîne l’affichage de la commande U pour afficher la structure GCInfo de la méthode.L’option -ehinfo affiche des informations d’exception pour la méthode. Vous pouvez également obtenir ces informations avec la commande EHInfo. L’option -n désactive l’affichage des noms de fichiers sources et des numéros de ligne. Si le débogueur a l’option SYMOPT_LOAD_LINES spécifiée, SOS recherche les symboles de chaque frame managé et, si elle réussit, affiche le nom et le numéro de ligne correspondants du fichier source. Vous pouvez spécifier l’option -n pour désactiver ce comportement. |
VerifyHeap | Vérifie le tas du récupérateur de mémoire pour détecter les signes d’altération et affiche les erreurs trouvées. Les altérations de tas peuvent être provoquées par des appels d’appel de plateforme qui sont construits de manière incorrecte. Pris en charge pour les applications AOT natives. |
Vérifie l’objet passé en tant qu’argument pour détecter les signes d’altération. Prise en charge uniquement sur Windows. | |
VMMap | Traverse l’espace d’adressage virtuel et affiche le type de protection appliqué à chaque région. Uniquement pris en charge avec Windbg. |
vmStat | Fournit une vue récapitulative de l’espace d’adressage virtuel, ordonnée par chaque type de protection appliquée à 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 BLK COUNT. Uniquement pris en charge avec Windbg. |
Débogueur Windows
Vous pouvez également utiliser les extensions du débogueur .NET en les chargeant dans le débogueur WinDbg/dbg et en exécutant des commandes dans le débogueur Windows. Les commandes peuvent être utilisées sur des processus en direct ou des vidages.
Windbg doit charger automatiquement l’extension 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 des extensions de débogueur .NET pour LLDB, consultez dotnet-debugger-extensions. Les commandes peuvent être utilisées sur des processus en direct ou des vidages.
Par défaut, vous pouvez atteindre toutes les commandes en entrant : sos [command_name]
. Toutefois, les commandes courantes ont été alias afin que vous n’ayez pas besoin du préfixe sos
:
Commander | Fonction |
---|---|
analyzeoom |
Affiche les informations du dernier OOM qui s’est produit sur une demande d’allocation au tas GC. |
bpmd |
Crée un point d’arrêt à la méthode gérée spécifiée dans le module spécifié. |
clrmodules |
Répertorie les modules managés dans le processus. |
clrstack |
Fournit une trace de pile de code managé uniquement. |
clrthreads |
Répertorie les threads managés en cours d’exécution. |
clru |
Affiche un désassemblement annoté d’une méthode managée. |
dbgout |
Active/désactive (-off ) la journalisation SOS interne. |
dso |
Affiche tous les objets managés trouvés dans les limites de la pile actuelle. |
dumpalc |
Affiche des détails sur un AssemblyLoadContext collectible sur lequel l’objet spécifié est chargé. |
dumparray |
Affiche des détails sur un tableau managé. |
dumpasync |
Affiche des informations sur les ordinateurs d’état asynchrones sur le tas collecté par le garbage. |
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 collecté par le garbage et les statistiques de collecte sur les objets. |
dumpil |
Affiche le langage intermédiaire commun (CIL) associé à une méthode managée. |
dumplock |
Affiche des informations sur les objets System.Threading.Lock, tels que ceux détenus par des threads (par défaut) ou ceux qui sont attendus par des threads. Cette commande est disponible dans extensions de débogueur .NET uniquement. |
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 les informations de 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 MethodTable qu’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 seul élément d’un objet de signature. |
dumpstack |
Affiche une trace de pile native et gérée. |
dumpstackobjects |
Affiche tous les objets managés trouvé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 d’exécution internes. |
eestack |
Exécute dumpstack sur tous les threads du processus. |
eeversion |
Affiche des informations sur les versions runtime et SOS. |
ehinfo |
Affiche les blocs de gestion des exceptions dans une méthode JIT. |
finalizequeue |
Affiche tous les objets inscrits pour la finalisation. |
findappdomain |
Tente de résoudre l’AppDomain d’un objet GC. |
findroots |
Recherche et affiche les racines d’objet dans les collections GC. |
gchandles |
Affiche des statistiques sur les handles de garbage collector dans le processus. |
gcheapstat |
Affiche des statistiques sur le garbage collector. |
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 à partir du journal de contrainte enregistré dans le débogage. |
histobj |
Examine tous les enregistrements de réaffectation du journal de contrainte et affiche la chaîne de réaffectations de garbage collection qui ont peut-être conduit à l’adresse passée en tant qu’argument. |
histobjfind |
Affiche toutes les entrées de journal qui référencent l’objet à l’adresse spécifiée. |
histroot |
Affiche les informations relatives aux promotions et aux réinstallations de la racine spécifiée. |
histstats |
Affiche les statistiques du journal des contraintes. |
ip2md |
Affiche la structure MethodDesc à l’adresse spécifiée dans le code qui a été compilée par JIT. |
listnearobj |
Affiche l’objet qui précède et réussit 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és 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 d’un objet dérivé de la classe Exception à l’adresse spécifiée. |
printexception |
Affiche et met en forme les champs d’un objet dérivé 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 interrompt la prochaine fois qu’une exception managée est interceptée pendant 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 du système d’exploitation/thread au lieu d’utiliser la base de données 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 lorsqu’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 les informations du détenteur syncBlock. |
taskstate |
Affiche un état de tâche dans un format lisible par l’homme. |
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 des informations de tas dans un fichier dans un format compris par le CLR Profiler. |
verifyheap |
Vérifie le tas GC pour détecter les signes d’altération. |
verifyobj |
Vérifie l’objet passé en tant qu’argument pour détecter les signes d’altération. |
Exemple d’utilisation de Windbg/cdb
Commander | Description |
---|---|
!dumparray -start 2 -length 5 -details 00ad28d0 |
Affiche le contenu d’un tableau à l’adresse 00ad28d0 . L’affichage commence à partir du deuxième élément et se poursuit pour cinq éléments. |
!dumpassembly 1ca248 |
Affiche le contenu d’un assembly à l’adresse 1ca248 . |
!dumpheap |
Affiche des informations sur le tas du garbage collector. |
!DumpLog |
Écrit le contenu du journal de contrainte en mémoire dans un fichier (par défaut) appelé StressLog.txt 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éthode à l’adresse 0090320c . |
!eeheap -gc |
Affiche la mémoire du processus utilisée par le garbage collector. |
!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 de garbage collector dans le processus actuel. |
!name2ee unittest.exe MainClass.Main |
Affiche les structures MethodTable et EEClass pour la méthode Main dans la classe MainClass dans le 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
Commander | Description |
---|---|
dumparray -start 2 -length 5 -details 00ad28d0 |
Affiche le contenu d’un tableau à l’adresse 00ad28d0 . L’affichage commence à partir du deuxième élément et se poursuit pour cinq éléments. |
dumpassembly 1ca248 |
Affiche le contenu d’un assembly à l’adresse 1ca248 . |
dumpheap |
Affiche des informations sur le tas du garbage collector. |
dumplog |
Écrit le contenu du journal de contrainte en mémoire dans un fichier (par défaut) appelé StressLog.txt 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éthode à l’adresse 0090320c . |
eeheap -gc |
Affiche la mémoire du processus utilisée par le garbage collector. |
findappdomain 00a79d98 |
Détermine le domaine d’application d’un objet à l’adresse 00a79d98 . |
gcinfo 5b68dbb8 |
Affiche tous les handles de garbage collector dans le processus actuel. |
name2ee unittest.exe MainClass.Main |
Affiche les structures MethodTable et EEClass pour la méthode Main dans la classe MainClass dans le 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
- Présentation des vidages dans .NET
- Découvrez comment déboguer une fuite de mémoire dans .NET
- Collecte et analyse des vidages de mémoire
- outil d’analyse de vidage (dotnet-dump)
- programme d’installation des extensions du débogueur .NET (dotnet-debugger-extensions)
- outil d’analyse de tas (dotnet-gcdump)