Partager via


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

Mise à jour : novembre 2007

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 runtime Debug pour fournir des services de débogage. Le code source de MDbg.exe est fourni à titre d'exemple d'application dans le Kit de développement logiciel (SDK) Windows. Les développeurs peuvent examiner ce code pour apprendre à utiliser les services de débogage. Actuellement, 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é.

MDbg [ProgramName[Program arguments]] [optional arguments ]
command [command arguments]

Commandes

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 PID, mais une liste d'index 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 analysés en séquence. break FileName:LineNo définit un point d'arrêt à un emplacement dans la source. break ~nombre définit un point d'arrêt sur un symbole récemment affiché avec la commande x. break module!ClassName.Method+IlOffset définit un point d'arrêt à l'emplacement qualifié complet.

ca[tch] [TypeException]

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

conf[ig] [valeur d'option]

Affiche toutes les options configurables et 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 :

extpath : Définit le chemin où les extensions sont recherchées lorsque la commande load est utilisée.

extpath+ : Ajoute un chemin aux chemins d'accès existants à partir desquels les extensions peuvent être chargées.

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.

ex[it] [code de sortie]

Sort du shell MDbg.exe, en spécifiant é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 provoque l'arrêt du programme (par exemple, une exception non gérée).

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[ist] [modules|domainesapp|assemblys]

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.

mo[de] [option on/off]

Définit différentes options de débogueur. Le paramètre option doit être une paire à deux lettres.

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

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

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 obliger le débogueur à compiler le code juste-à-temps (JIT) avec l'un des trois

indicateurs valides :

-d(ebug) est la valeur par défaut pour MDbg.exe et désactive les optimisations.

-o(ptimize) est la valeur par défaut pour une utilisation en dehors du débogueur. Il 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.

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

Définissez variable=valeur

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 l'option -il est spécifiée, le nombre représente un décalage de langage intermédiaire 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, émettez la commande CTRL-C à arrêter 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] [NouveauThread][-surnom]

Assigne nom comme surnom au thread actuellement actif. Le surnom peut être utilisé à la place du nom de thread. 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 surnom est "", le surnom du thread actuel est supprimé et aucun nouveau surnom n'est assigné au thread.

thread NouveauThread - Affecte au thread actif la valeur NouveauThread. NouveauThread peut être soit un surnom pour le thread, soit un numéro de thread.

thread - Affiche tous les threads managés dans le processus actuel.

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.

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.

when

Affiche les instructions when actuellement actives.

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

when stopReason[specific_condition] do cmd[cmd[cmd…] ] – Le paramètre stopReason peut être :

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

condition_spécifique peut être :

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 symbolesNum] [module[!modèle]]

Affiche les fonctions qui correspondent au pattern pour un module.

Si symbolesNum est spécifié, la sortie est limitée au nombre spécifié. Si !regex n'est pas spécifié, 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.

Remarque :

Les commandes de MDbg.exe respectent la casse.

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é l'application, tapez MDbg à l'invite de commandes 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 vous trouvez dans le débogueur, utilisez les commandes et les arguments appropriés pour appeler la fonctionnalité requise.

Voir aussi

Référence

Outils du .NET Framework

Invite de commandes du Kit de développement SDK