Diagnostic d'erreurs avec les Assistants de débogage managés
Mise à jour : Juillet 2008
Les Assistants Débogage managé (MDA) sont des outils de débogage qui fonctionnent conjointement avec le Common Language Runtime (CLR) pour fournir des informations sur l'état du runtime. Les Assistants génèrent des messages d'information à propos d'événements du runtime qui, sinon, sont impossibles à intercepter. Vous pouvez les utiliser pour isoler des bogues d'application difficilement détectables qui se produisent au cours de la transition entre le code managé et le code non managé. Vous pouvez activer ou désactiver tous les Assistants Débogage managé en ajoutant une clé au Registre Windows ou en définissant une variable d'environnement. Vous pouvez activer des Assistants Débogage managé spécifiques en utilisant des paramètres de configuration d'application. Vous pouvez définir des paramètres de configuration supplémentaires pour certains d'entre eux dans le fichier de configuration de l'application. Dans la mesure où ces fichiers de configuration sont analysés au moment du chargement du runtime, vous devez activer l'Assistant Débogage managé avant le démarrage de l'application managée. Vous ne pouvez pas l'activer pour des applications déjà démarrées.
Remarque : |
---|
Lorsqu'il est activé, un MDA est actif même si votre code n'est pas exécuté dans 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 s'affiche dans une boîte de dialogue d'exception non gérée, bien qu'il ne s'agisse pas d'une exception non gérée. Pour que la boîte de dialogue n'apparaisse plus, supprimez les paramètres d'activation du MDA lorsque votre code n'est pas exécuté dans un environnement de débogage. |
Remarque : |
---|
Lorsque votre code s'exécute dans l'environnement de développement intégré Visual Studio (IDE), vous pouvez empêcher la boîte de dialogue d'exception de s'afficher pour des événements MDA spécifiques. Pour ce faire, dans le menu Déboguer, cliquez sur Exceptions. Si le menu Déboguer ne contient pas la commande Exceptions, cliquez sur Personnaliser dans le menu Outils pour l'ajouter. Dans la boîte de dialogue Exceptions, développez la liste Assistant débogage managé, puis désactivez la case à cocher Levé pour le MDA individuel. Par exemple, pour empêcher la boîte de dialogue d'exception pour un Assistant Débogage managé contextSwitchDeadlock de s'afficher, désactivez la case à cocher Levé en regard de son nom dans la liste Assistant débogage managé. Vous pouvez également utiliser cette boîte de dialogue pour activer des MDA. |
Le tableau suivant répertorie les Assistants Débogage managé fournis avec le .NET Framework.
Par défaut, le .NET Framework active un sous-ensemble de MDA pour tous les débogueurs managés. Vous pouvez consulter le jeu par défaut dans Visual Studio en cliquant sur Exceptions dans le menu Déboguer et en développant la liste Assistant Débogage managé.
Activation et désactivation des Assistants Débogage managé
Vous pouvez activer et désactiver ces Assistants à l'aide d'une clé de Registre, d'une variable d'environnement et des 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.
Dans Visual Studio 2005 et versions ultérieures, lorsque le processus d'hébergement est activé, vous ne pouvez pas désactiver les MDA qui se trouvent dans le jeu par défaut ni activer ceux qui n'y figurent pas. Le processus d'hébergement étant activé par défaut, il doit être désactivé explicitement.
Pour désactiver le processus d'hébergement dans Visual Studio, procédez comme suit :
Dans l'Explorateur de solutions, sélectionnez un projet.
Dans le menu Projet, cliquez sur Propriétés.
La fenêtre Concepteur de projets apparaît.
Cliquez sur l'onglet Débogage.
Dans la section Activer les débogueurs, désactivez la case à cocher Activer le processus d'hébergement Visual Studio.
Toutefois, la désactivation du processus d'hébergement peut affecter les performances. Vous pouvez éviter de désactiver les MDA en empêchant Visual Studio d'afficher la boîte de dialogue MDA dès qu'une notification MDA est reçue. Pour ce faire, cliquez sur Exceptions dans le menu Déboguer, développez la liste Assistant Débogage managé, puis sélectionnez ou désactivez la case à cocher Levé pour chaque MDA.
Activation et désactivation à l'aide d'une clé de Registre
Vous pouvez activer les Assistants Débogage managé en ajoutant la sous-clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA dans le Registre Windows. Copiez l'exemple suivant dans un fichier texte nommé « MDAEnable.reg » :
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"
Dans une invite de commandes, exécutez le fichier MDAEnable.reg pour activer les Assistants Débogage managé sur cet ordinateur. Pour désactiver les Assistants Débogage managé, copiez l'exemple suivant dans un fichier texte nommé « MDADisable.reg »:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="0"
Ensuite, exécutez le fichier MDADisable.reg à partir d'une invite de commandes.
Par défaut, certains Assistants Débogage managé sont activés lors de l'exécution de l'application attachée à un débogueur, même sans ajouter la clé de Registre. Assistant Débogage managé pInvokeStackImbalance et Assistant Débogage managé invalidApartmentStateChange sont deux exemples d'Assistants Débogage managé. Vous pouvez désactiver ces Assistants en exécutant le fichier MDADisable.reg comme décrit ci-dessus.
Activation et désactivation à l'aide d'une variable d'environnement
L'activation des Assistants Débogage managé peut également être contrôlée par la variable d'environnement COMPLUS_MDA. La variable d'environnement substitue la clé de Registre. La chaîne est une liste délimitée par des points-virgules, qui ne respecte pas la casse, de noms d'Assistants Débogage managé 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'Assistants Débogage managé. Cette opération est effectuée en ajoutant implicitement la liste délimitée par des points-virgules des Assistants Débogage managé activés par défaut sous des débogueurs à 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 Assistants Débogage managé.
1 - Lit les paramètres MDA à partir du fichier ApplicationName.mda.config.
managedDebugger - Active explicitement tous les Assistants Débogage managé activés implicitement lors du démarrage d'un fichier exécutable managé sous un débogueur.
unmanagedDebugger - Active explicitement tous les Assistants Débogage managé activés implicitement lors du démarrage d'un fichier exécutable non managé sous un débogueur.
En présence de paramètres incompatibles, les paramètres les plus récents se substituent aux paramètres antérieurs :
COMPLUS_MDA=0 désactive tous les Assistants Débogage managé, y compris ceux implicitement activés sous un débogueur.
COMPLUS_MDA=gcUnmanagedToManaged active gcUnmanagedToManaged en plus des Assistants Débogage managé activés implicitement sous un débogueur.
COMPLUS_MDA =0;gcUnmanagedToManaged active gcUnmanagedToManaged, mais désactive les Assistants Débogage managé normalement activés implicitement sous un débogueur.
Activation et désactivation à l'aide de paramètres de configuration spécifiques à l'application
Vous pouvez activer, désactiver et configurer individuellement certains Assistants dans le fichier de configuration MDA de l'application. Pour activer l'utilisation d'un fichier de configuration de l'application en vue de configurer des Assistants Débogage managé, la clé de Registre MDA ou la variable d'environnement COMPLUS_MDA doit être définie. Le fichier de configuration de l'application est généralement situé dans le même répertoire que le fichier exécutable de l'application (.exe). Le nom de fichier se présente sous 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 spécifiquement conçus pour contrôler le comportement de cet Assistant. L'exemple suivant montre comment activer et configurer Assistant Débogage managé marshaling.
<mdaConfig>
<assistants>
<marshaling>
<methodFilter>
<match name="*"/>
</methodFilter>
<fieldFilter>
<match name="*"/>
</fieldFilter>
</marshaling>
</assistants>
</mdaConfig>
Ces paramètres activent et configurent l'Assistant Débogage managé Marshaling qui émet des informations décrivant le marshaling du type managé en type non managé pour chaque transition de code managé en code non managé dans l'application. L'Assistant Débogage managé Marshaling est en outre suffisamment souple pour permettre le filtrage du nom de la méthode et des champs de structure fournis respectivement dans les éléments enfants <methodFilter> et <fieldFilter>.
Pour plus d'informations sur les paramètres spécifiques à chaque Assistant Débogage managé, consultez la documentation relative à celui-ci.
Sortie de l'Assistant Débogage managé
La sortie de l'Assistant Débogage managé est similaire à celle proposée dans l'exemple suivant, qui affiche la sortie de l'Assistant Débogage managé pInvokeStackImbalance.
A call to PInvoke function 'MDATest!MDATest.Program::StdCall' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
Voir aussi
Autres ressources
Débogage et profilage d'applications
Historique des modifications
Date |
Historique |
Raison |
---|---|---|
Juillet 2008 |
Ajout d'une remarque expliquant comment éviter le message ContextSwitchDeadlock. |
Commentaires client. |