Partager via


MDbg.exe (débogueur de ligne de commande du .NET Framework)

Le débogueur de ligne de commande du .NET Framework aide les fournisseurs d'outils et les développeurs d'applications à trouver et à corriger les bogues dans les programmes qui ont pour cible le Common Language Runtime du .NET Framework. Cet outil utilise l'API de débogage du runtime pour fournir des services de débogage. Vous pouvez utiliser MDbg.exe pour déboguer uniquement du code managé ; il n'y a pas de prise en charge du débogage du code non managé.

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 :

MDbg [ProgramName[arguments]] [options]

Commandes

Lorsque vous êtes dans le débogueur (comme indiqué par l'invite mdbg>), tapez l'une des commandes décrites dans la section suivante :

command [arguments]

Les commandes de MDbg.exe respectent la casse.

Commande

Description

ap[rocess] [numéro]

Passe à un autre processus débogué ou imprime les processus disponibles. Les numéros ne sont pas de véritables ID de processus (PIDs), mais une liste indexée de 0.

a[ttach] [pid]

Est joint à un processus ou imprime les processus disponibles.

b[reak] [ClassName.Method | FileName:LineNo]

Définit un point d'arrêt sur la méthode spécifiée. Les modules sont numérisés séquentiellement.

  • break FileName:LineNo définit un point d'arrêt à un emplacement dans la source.

  • break ~number définit un point d'arrêt sur un symbole affiché récemment avec la commande x.

  • break module!ClassName.Method+IlOffset définit un point d'arrêt sur l'emplacement complet.

bloc[ingObjects]

Affiche les verrous du moniteur, qui sont des threads bloquants.

ca[tch] [TypeException]

Avec cette commande, le débogueur s'arrête à chaque exception, pas uniquement les exceptions non gérées.

cl[earException]

Marque l'exception actuelle comme gérée afin que l'exécution puisse continuer. Si la cause de l'exception n'a pas été traitée, l'exception peut être rapidement levée à nouveau.

conf[ig] [valeur d'option]

Affiche toutes les options configurables et indique la manière avec laquelle les options sont appelées sans aucune valeur facultative. Si l'option est spécifiée, définit value comme l'option actuelle. Les options actuellement disponibles sont les suivantes :

  • extpath définit le chemin d'accès pour rechercher des extensions lorsque la commande load est utilisée.

  • extpath+ ajoute un chemin d'accès pour le chargement des extensions.

del[ete]

Supprime un point d'arrêt.

de[tach]

Se détache d'un processus débogué.

d[own] [frames]

Descend la trame de pile active.

echo

Reproduit en écho un message dans la console.

enableNotif[ication] typeName 0|1

Active (1) ou désactive (0) des notifications personnalisées pour le type spécifié.

ex[it] [code de sortie]

Quitte l'interpréteur de commandes MDbg.exe et spécifie éventuellement le code de sortie du processus.

fo[reach] [AutreCommande]

Exécute une commande sur tous les threads. AutreCommande est une commande valide qui fonctionne sur un thread ; foreach AutreCommande exécute la même commande sur tous les threads.

f[unceval] [-ad Num] NomFonction [args... ]

Exécute une évaluation de fonction sur le thread actif actuel où la fonction à évaluer est NomFonction. Le nom de fonction doit être pleinement qualifié, espaces de noms compris.

L'option -ad spécifie le domaine d'application à utiliser pour résoudre la fonction. Si l'option -ad n'est pas spécifiée, le domaine d'application pour la résolution est par défaut le domaine d'application où se trouve le thread qui est utilisé pour l'évaluation de la fonction.

Si la fonction qui est évaluée n'est pas statique, le premier paramètre passé doit être un pointeur this. Les arguments de l'évaluation de fonction sont recherchés dans tous les domaines d'application.

Pour demander une valeur d'un domaine d'application, préfixez la variable avec le module et le nom du domaine d'application, par exemple funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef. Cette commande évalue la fonction System.Object.ToString dans le domaine d'application 0. Étant donné que la méthode ToString est une fonction d'instance, le premier paramètre doit être un pointeur this.

g[o]

Avec cette commande, le programme continue jusqu'à ce qu'il rencontre un point d'arrêt, que le programme se termine, ou qu'un événement (par exemple, une exception non gérée) provoque l'arrêt du programme.

h[elp] [commande]

ou

? [commande]

Affiche une description de toutes les commandes ou une description détaillée d'une commande spécifiée.

ig[nore] [événement]

Avec cette commande, le débogueur s'arrête uniquement sur les exceptions non gérées.

int[ercept] NuméroFrame

Restaure le débogueur à un numéro de frame spécifié.

Si le débogueur rencontre une exception, utilisez cette commande pour restaurer le débogueur au numéro de frame spécifié. Vous pouvez modifier l'état du programme à l'aide de la commande set et continuer à utiliser la commande go.

k[ill]

Arrête le processus actif.

l[iste] [modules | appdomains | assemblies]

Affiche les modules, domaines d'application ou assemblys chargés.

lo[ad] NomAssembly

Charge une extension de la manière suivante : l'assembly spécifié est chargé et une tentative est ensuite faite d'exécuter la méthode statique LoadExtension à partir du type Microsoft.Tools.Mdbg.Extension.Extension.

fichier journal [eventType]

Définissez ou affichez les événements à enregistrer.

mo[de] [option on/off]

Définit différentes options de débogueur. Utilisez mode sans option pour obtenir la liste des modes de débogage et leurs paramètres actuels.

mon[itorInfo] monitorReference

Affiche les informations de verrou du moniteur d'objet.

newo[bj] NomType [arguments...]

Crée un nouvel objet de type NomType.

n[ext]

Exécute le code et passe à la ligne suivante (même si la ligne suivante contient de nombreux appels de fonction).

Opendump pathToDumpFile

Ouvre le fichier dump spécifié pour le débogage.

o[ut]

Déplace le curseur à la fin de la fonction actuelle.

pa[th] [NomChemin]

Recherche dans le chemin d'accès spécifié les fichiers sources si l'emplacement dans les binaires n'est pas disponible.

p[rint] [var] | [-d]

Imprime toutes les variables dans la portée (print), imprime la variable spécifiée (print var) ou imprime les variables du débogueur (imprimez -d).

printe[xception] [-r]

Imprime la dernière exception sur le thread actuel. Utilisez l'option (récursive) –r pour parcourir la propriété InnerException sur l'objet exception pour obtenir des informations sur la chaîne entière des exceptions.

pro[cessenum]

Affiche les processus actifs.

q[uit] [code de sortie]

Quitte le shell MDbg.exe, en spécifiant éventuellement le code de sortie du processus.

re[sume] [* | [~]NuméroThread]

Reprend le thread actuel ou le thread spécifié par le paramètre NuméroThread.

Si le paramètre NuméroThread est spécifié comme * ou si le numéro de thread commence par ~, la commande s'applique à tous les threads à l'exception de celui spécifié par NuméroThread.

Reprendre un thread non suspendu n'a aucun effet.

r[un] [-d(ebug) | -o(ptimize) |-enc] [[chemin_vers_exe] [args_vers_exe]]

Arrête le processus en cours (le cas échéant) et en démarre un nouveau. Si aucun argument exécutable n'est passé, cette commande exécute le programme qui était précédemment exécuté avec la commande run. Si l'argument exécutable est fourni, le programme spécifié est exécuté à l'aide des arguments éventuellement fournis.

Si les événements de chargement de classe, de chargement de module et de démarrage de thread sont ignorés (comme c'est le cas par défaut), le programme s'arrête sur la première instruction exécutable du thread principal.

Vous pouvez forcer le débogueur à effectuer une compilation juste-à-temps (JIT) du code en utilisant l'une des trois balises suivantes :

  • -d(ebug) désactive les optimisations. Il s'agit de la valeur par défaut pour MDbg.exe.

  • -o(ptimize) oblige le code à s'exécuter plus comme il le fait en dehors du débogueur, mais rend également l'expérience de débogage plus difficile. Ceci est la valeur par défaut pour une utilisation en dehors du débogueur.

  • -enc active la fonction Modifier & Continuer mais encourt une baisse de performance.

Set variable=value

Change la valeur de n'importe quelle variable à l'intérieur de la portée.

Vous pouvez également créer vos propres variables de débogueur et leur assigner des valeurs de référence à partir de votre application. Ces valeurs agissent comme des handles pour la valeur d'origine, même la valeur d'origine est hors de portée. Toutes les variables du débogueur doivent commencer par $ (par exemple, $var). Effacez ces handles en leur donnant une valeur nulle à l'aide de la commande suivante :

set $var=

Setip [-il] nombre

Définit le pointeur d'instruction (IP) actuel dans le fichier à la position spécifiée. Si vous spécifiez l'option -il, le numéro représente un décalage MSIL (Microsoft intermediate langage) dans la méthode. Autrement, le nombre représente un numéro de ligne source.

sh[ow] [lignes]

Spécifie le nombre de lignes à montrer.

s[tep]

Déplace l'exécution à la fonction suivante sur la ligne en cours, ou passe à la ligne suivante en l'absence de fonction dans laquelle passer.

su[spend] [* | [~]NuméroThread]

Suspend le thread actuel ou le thread spécifié par le paramètre NuméroThread. Si NuméroThread est spécifié comme *, la commande s'applique à tous les threads. Si le numéro de thread commence avec ~, la commande s'applique à tous les threads à l'exception de celui spécifié par NuméroThread. Les threads suspendus sont exclus de l'exécution lorsque le processus est exécuté par la commande go ou step. Si n'y a pas de thread non suspendu dans le processus et que vous émettez la commande go, le processus ne continuera pas. Dans ce cas, appuyez sur CTRL-C pour entrer dans le processus.

sy[mbol] NomCommande [ValeurCommande]

Spécifie l'une des commandes suivantes :

  • symbol path ["value"] - Affiche ou définit le chemin d'accès actuel aux symboles.

  • symbol addpath "value" - Ajoute à votre chemin d'accès actuel aux symboles.

  • symbol reload ["module"]- Recharge soit tous les symboles soit les symboles du module spécifié.

  • symbol list [module] - Affiche les symboles actuellement chargés soit pour tous les modules soit pour le module spécifié.

t[hread] [newThread] [-pseudonyme]

La commande de threads sans paramètres affiche tous les threads managés dans le processus en cours. Les threads sont généralement identifiés par leur numéro de thread. Toutefois, si le thread a un surnom assigné, celui-ci est affiché à la place. Vous pouvez utiliser le paramètre -nick pour assigner un alias à un thread.

  • Dans thread -nick NomThread assigne un pseudo au thread en cours de exécution.

Les surnoms ne peuvent pas être des nombres. Si le thread actuel a déjà un surnom assigné, l'ancien surnom est remplacé par le nouveau. Si le nouveau pseudo est une chaîne vide (""), le pseudo du thread en cours est supprimé et aucun nouveau pseudo n'est assigné au thread.

u[p]

Monte la trame de pile active.

uwgc[handle] [var] | [adresse]

Imprime la variable suivie par un handle. Le handle peut être spécifié par nom ou par adresse.

Quand

Affiche les instructions when actuellement actives.

when delete all | num [num [num]…] - Supprime l'instruction when spécifiée par le numéro ou toutes les instructions when si all est spécifié.

when stopReason [specific_condition] do cmd [cmd [cmd …] ] - Le paramètre stopReason peut avoir l'une des valeurs suivantes :

StepComplete, ProcessExited, ThreadCreated, BreakpointHit, ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ControlCTrapped, ExceptionThrown, UnhandledExceptionThrown, AsyncStop, AttachComplete, UserBreak, EvalComplete, EvalException, RemapOpportunityReached, NativeStop.

specific_condition peut être l'un des éléments suivants :

  • numéro - Pour ThreadCreated et BreakpointHit, déclenche l'action uniquement lorsqu'elle est arrêtée par un numéro d'ID/point d'arrêt de thread de même valeur.

  • [!]nom - Pour ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ExceptionThrown et UnhandledExceptionThrown, déclenche l'action uniquement lorsque le nom correspond au nom de la RaisonArrêt.

condition_spécifique doit être vide pour d'autres valeurs de RaisonArrêt.

w[here] [-v] [-c profondeur] [IDThread]

Affiche des informations de débogage sur des trames de pile.

  • L'option -v fournit des informations détaillées sur chacun des frames de pile affichés.

  • La spécification d'un nombre pour depth limite le nombre de frames affichés. Utilisez la commande all pour afficher tous les frames. La valeur par défaut est 100.

  • Si vous spécifiez le paramètre IDThread, vous pouvez contrôler quel thread est associé à la pile. La valeur par défaut est le thread actuel uniquement. Utilisez la commande all pour obtenir tous les threads.

x [-c numSymbols] [module[!modèle]]

Affiche les fonctions qui correspondent à pattern pour un module.

Si symbolesNum est spécifié, la sortie est limitée au nombre spécifié. Si ! (indiquant une expression régulière) n'est pas spécifié pour le pattern, toutes les fonctions sont affichées. Si module n'est pas fourni, tous les modules chargés sont affichés. Les symboles (~ #) peuvent être utilisés pour définir des points d'arrêt à l'aide de la commande break.

Notes

Compilez l'application à déboguer à l'aide d'indicateurs spécifiques au compilateur, ce qui oblige ce dernier à générer des symboles de débogage. Pour plus d'informations sur ces indicateurs, consultez la documentation de votre compilateur. Il est toujours possible de déboguer des applications optimisées, mais il manquera certaines informations de débogage. Par exemple, un grand nombre de variables locales ne seront pas visibles et certaines lignes sources seront incorrectes.

Après avoir compilé votre application, tapez mdbg à l'invite de commande pour démarrer une session de débogage, comme le montre l'exemple suivant.

C:\Program Files\Microsoft Visual Studio 8\VC>mdbg
MDbg (Managed debugger) v2.0.50727.42 (RTM.050727-4200) started.
Copyright (C) Microsoft Corporation. All rights reserved.

For information about commands type "help";
to exit program type "quit".
mdbg>

L'invite mdbg> indique que vous vous trouvez dans le débogueur.

Une fois que vous êtes dans le débogueur, utilisez les commandes et les arguments décrits dans la section précédente.

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.