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