Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
Cet article est spécifique à .NET Framework. Elle ne s’applique pas aux implémentations plus récentes de .NET, notamment .NET 6 et versions ultérieures.
Les assistants de débogage managé (MDA) déboguent des aides qui fonctionnent avec le Common Language Runtime (CLR) pour fournir des informations sur l’état du runtime. Les assistants génèrent des messages d’information sur les événements d’exécution que vous ne pouvez pas intercepter. Vous pouvez utiliser des MDAs pour isoler les bogues d’application difficiles à trouver qui se produisent lors de la transition entre le code managé et non managé.
Vous pouvez activer ou désactiver tous les MDAs en ajoutant une clé au Registre Windows ou en définissant une variable d’environnement. Vous pouvez activer des mdAs spécifiques à l’aide des paramètres de configuration d’application. Vous pouvez définir des paramètres de configuration supplémentaires pour certains MDA individuels dans le fichier de configuration de l’application. Étant donné que ces fichiers de configuration sont analysés lorsque le runtime est chargé, vous devez activer l’authentification multifacteur avant le démarrage de l’application managée. Vous ne pouvez pas l’activer pour les applications qui ont déjà démarré.
Le tableau suivant répertorie les MDAs fournis avec .NET Framework :
Par défaut, .NET Framework active un sous-ensemble d’mdAs pour tous les débogueurs managés. Vous pouvez afficher l’ensemble par défaut dans Visual Studio en choisissantLes paramètres d’exceptionWindows> dans le menu Débogage, puis en développant la liste Assistants de débogage managé.
Activer et désactiver des mdAs
Vous pouvez activer et désactiver des mdAs à l’aide d’une clé de Registre, d’une variable d’environnement et de paramètres de configuration d’application. Vous devez activer la clé de Registre ou la variable d’environnement pour utiliser les paramètres de configuration de l’application.
Conseil / Astuce
Au lieu de désactiver les mdAs, vous pouvez empêcher Visual Studio d’afficher la boîte de dialogue MDA chaque fois qu’une notification MDA est reçue. Pour ce faire, sélectionnezParamètres d’exceptionWindows> dans le menu Débogage, développez la liste Des Assistants de débogage managé, puis activez ou désactivez la case à cocher Saut lorsque l’option Saut est levée pour l’assistant MDA individuel.
Clé de Registre
Pour activer les mdAs, ajoutez la sous-clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA (type REG_SZ, valeur 1) dans le Registre Windows. Copiez l’exemple suivant dans un fichier texte nommé MDAEnable.reg. Ouvrez l’Éditeur du Registre Windows (RegEdit.exe), puis, dans le menu Fichier , choisissez Importer. Sélectionnez le fichier MDAEnable.reg pour activer les mdAs sur cet ordinateur. La définition de la sous-clé sur la valeur de chaîne 1 (et non la valeur DWORD de 1) permet de lire les paramètres MDA à partir du fichier .mda.config ApplicationName.suffix . Par exemple, le fichier de configuration MDA pour le Bloc-notes est nommé notepad.exe.mda.config.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"
Si l’ordinateur exécute une application 32 bits sur un système d’exploitation 64 bits, la clé MDA doit être définie comme suit :
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"MDA"="1"
Pour plus d’informations , consultezApplication-Specific Paramètres de configuration . Le paramètre de Registre peut être remplacé par la variable d’environnement COMPLUS_MDA
. Pour plus d’informations, consultez La variable d’environnement .
Pour désactiver les mdAs, définissez la sous-clé MDA sur 0 (zéro) à l’aide de l’éditeur de Registre Windows.
Par défaut, certains MDAs sont activés lorsque vous exécutez une application attachée à un débogueur, même sans ajouter la clé de Registre. Vous pouvez désactiver ces assistants en exécutant le fichier MDADisable.reg comme décrit précédemment dans cette section.
Variable d’environnement
L’activation MDA peut également être contrôlée par la variable COMPLUS_MDA
d’environnement, qui remplace la clé de Registre. La COMPLUS_MDA
chaîne est une liste délimitée par des points-virgules non respectant la casse des noms MDA ou d’autres chaînes de contrôle spéciales. Le démarrage sous un débogueur managé ou non managé active par défaut un ensemble d’mdAs. Pour ce faire, vous devez précéder implicitement la liste délimitée par des points-virgules des MDAs activée par défaut sous les débogueurs sur la valeur de la variable d’environnement ou de la clé de Registre. Les chaînes de contrôle spéciales sont les suivantes :
0
- Désactive tous les MDA.1
- Lit les paramètres MDA à partir du.mda.configApplicationName .managedDebugger
- Active explicitement tous les MDAs qui sont implicitement activés lorsqu’un exécutable managé est démarré sous un débogueur.unmanagedDebugger
- Active explicitement tous les MDAs qui sont implicitement activés lorsqu’un exécutable non managé est démarré sous un débogueur.
S’il existe des paramètres en conflit, les paramètres les plus récents remplacent les paramètres précédents :
COMPLUS_MDA=0
désactive tous les MDAs, y compris ceux qui sont implicitement activés sous un débogueur.COMPLUS_MDA=gcUnmanagedToManaged
permet en plus des MDAs qui sont implicitement activésgcUnmanagedToManaged
sous un débogueur.COMPLUS_MDA=0;gcUnmanagedToManaged
active mais désactive lesgcUnmanagedToManaged
mdAs qui seraient sinon implicitement activés sous un débogueur.
paramètres de configuration Application-Specific
Vous pouvez activer, désactiver et configurer certains assistants individuellement dans le fichier de configuration MDA de l’application. Pour activer l’utilisation d’un fichier de configuration d’application pour la configuration des mdAs, la clé de Registre MDA ou la COMPLUS_MDA
variable d’environnement doit être définie. Le fichier de configuration de l’application se trouve généralement dans le même répertoire que le fichier exécutable de l’application (.exe). Le nom de fichier prend la forme ApplicationName.mda.config; par exemple, notepad.exe.mda.config. Les assistants activés dans le fichier de configuration de l’application peuvent avoir des attributs ou des éléments conçus pour contrôler le comportement de cet assistant.
L’exemple suivant montre comment activer et configurer le marshaling :
<mdaConfig>
<assistants>
<marshaling>
<methodFilter>
<match name="*"/>
</methodFilter>
<fieldFilter>
<match name="*"/>
</fieldFilter>
</marshaling>
</assistants>
</mdaConfig>
Le Marshaling
MDA émet des informations sur le type managé qui est marshalé en un type non managé pour chaque transition managée à non managée dans l’application. Le Marshaling
MDA peut également filtrer les noms des champs de méthode et de structure fournis dans les éléments enfants methodFilter et fieldFilter, respectivement.
L’exemple suivant montre comment activer plusieurs MDA à l’aide de leurs paramètres par défaut :
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion />
<invalidCERCall />
<openGenericCERCall />
<virtualCERCall />
</assistants>
</mdaConfig>
Important
Lorsque vous spécifiez plusieurs assistants dans un fichier de configuration, vous devez les répertorier par ordre alphabétique. Par exemple, si vous souhaitez activer à la fois les virtualCERCall
MDA et les invalidCERCall
MDAs, vous devez ajouter l’entrée <invalidCERCall />
avant l’entrée <virtualCERCall />
. Si les entrées ne sont pas dans l’ordre alphabétique, un message d’exception de fichier de configuration non géré non géré s’affiche.
Exceptions MDA
Lorsqu’un MDA est activé, il est actif même lorsque votre code n’est pas en cours d’exécution sous un débogueur. Si un événement MDA est déclenché lorsqu’un débogueur n’est pas présent, le message d’événement est présenté dans une boîte de dialogue d’exception non gérée, bien qu’il ne s’agit pas d’une exception non gérée. Pour éviter la boîte de dialogue, supprimez les paramètres d’activation MDA lorsque votre code n’est pas en cours d’exécution dans un environnement de débogage.
Lorsque votre code s’exécute dans l’environnement de développement intégré (IDE) visual Studio, vous pouvez éviter la boîte de dialogue d’exception qui s’affiche pour des événements MDA spécifiques. Pour ce faire, dans le menu Débogage, choisissezParamètres d’exceptionWindows>. Dans la fenêtre Paramètres d’exception , développez la liste Des Assistants de débogage managé , puis désactivez la case à cocher Saut lorsque l’option Saut est levée pour l’assistant MDA individuel. Vous pouvez également utiliser cette boîte de dialogue pour activer l’affichage des boîtes de dialogue d’exception MDA.
Sortie MDA
La sortie MDA est similaire à l’exemple suivant, qui montre la sortie du PInvokeStackImbalance
MDA :
Un appel à la fonction PInvoke 'MDATest ! MDATest.Program ::StdCall' a déséquilibré la pile. Cela est probablement dû au fait que la signature PInvoke managée ne correspond pas à la signature cible non managée. Vérifiez que la convention d’appel et les paramètres de la signature PInvoke correspondent à la signature non managée cible.