Déboguer à l'aide du Just-In-Time Debugger dans Visual Studio
Le débogage juste-à-temps peut lancer Visual Studio automatiquement lorsqu’une application s’exécutant en dehors de Visual Studio présente des erreurs ou se bloque. Avec le débogage Just-In-Time, vous pouvez tester des applications en dehors de Visual Studio et ouvrir Visual Studio pour commencer le débogage lorsqu'un problème survient.
Le débogage juste-à-temps fonctionne pour les applications de bureau Windows. Il ne fonctionne pas pour les applications Windows universelles ou pour le code managé hébergé dans une application native, comme les visualiseurs.
Conseil
Si vous souhaitez simplement empêcher le dialogue Just-In-Time Debugger d’apparaître, mais que Visual Studio n’est pas installé, consultez Désactiver le Just-In-Time Debugger. Si vous avez déjà installé Visual Studio, vous devrez peut-être désactiver le débogage juste-à-temps à partir du Registre Windows.
Activer ou désactiver le débogage Just-In-Time dans Visual Studio
Vous pouvez configurer le débogage juste-à-temps à partir de la boîte de dialogue Visual Studio Outils>Options (ou Options>de débogage)
Remarque
Pour activer ou désactiver le débogage Just-In-Time, vous devez exécuter Visual Studio en tant qu’administrateur. L'activation ou la désactivation du débogage Just-In-Time définit une clé de Registre, et des privilèges d'administrateur peuvent être nécessaires pour modifier cette clé. Pour ouvrir Visual Studio en tant qu’administrateur, cliquez avec le bouton droit sur l’application Visual Studio et choisissez Exécuter en tant qu’administrateur.
Pour activer ou désactiver le débogage juste-à-temps :
Dans le menu Outils ou Déboguer, sélectionnez Options>Débogage>Juste-à-temps.
Remarque
Si l’option de menu Juste-In-Time n’est pas affichée, vérifiez que le débogueur Just-In-Time est installé à l’aide de Visual Studio Installer.
Dans la zone Activer le débogage juste-à-temps pour ces types de code, sélectionnez les types de code que vous voulez que le débogage juste-à-temps débogue : Géré, Natif et/ou Script.
Sélectionnez OK.
Si vous activez le débogueur Just-In-Time, mais qu’il ne s’ouvre pas lorsqu’une application se bloque ou génère des erreurs, consultez Résoudre les problèmes de débogage Just-In-Time.
Désactivez le débogage juste-à-temps à partir du Registre Windows
Le débogage Just-In-Time peut toujours être activé même si Visual Studio n’est plus installé sur votre ordinateur. Si Visual Studio n’est plus installé, vous pouvez désactiver le débogage juste-à-temps en modifiant le Registre Windows.
Pour désactiver le débogage juste-à-temps en modifiant le registre :
Depuis le menu Démarrer de Windows , exécutez l'Éditeur du Registre (regedit.exe).
Dans la fenêtre Éditeur de Registre, recherchez et supprimez les entrées de Registre suivantes s’il existe :
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Supprimez également les entrées de Registre suivantes s’il existe :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Veillez à ne pas supprimer ou modifier d’autres clés de Registre.
Fermez la fenêtre de l’Éditeur de Registre.
Activez le débogage juste-à-temps d’un Windows Form
Par défaut, les applications Windows Form disposent d’un gestionnaire d’exceptions de niveau supérieur qui permet à l’application de continuer à s’exécuter si elle peut récupérer. Si une application Windows Forms lève une exception non gérée, la boîte de dialogue suivante s’affiche :
Pour activer le débogage Just-In-Time au lieu de la gestion des erreurs standard de Windows Forms, ajoutez ces paramètres :
Dans la section
system.windows.forms
du fichier machine.config ou <nom de l’application>.exe.config, définissez la valeurjitDebugging
surtrue
:<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Dans une application Windows Form C++, définissez également
DebuggableAttribute
surtrue
dans un fichier .config ou dans votre code. Si vous compilez avec /Zi et sans /Og, le compilateur définit cet attribut pour vous. Si vous souhaitez déboguer une build de version non optimisée, toutefois, vous devez définirDebuggableAttribute
en ajoutant la ligne suivante dans le fichier AssemblyInfo.cpp de votre application :[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
Pour plus d’informations, consultez DebuggableAttribute.
Utilisez le débogage juste-à-temps
Cet exemple vous guide à travers le débogage Just-In-Time lorsqu’une application génère une erreur.
Visual Studio doit être installé pour suivre ces étapes. Si vous n’avez pas Visual Studio, vous pouvez télécharger la version gratuite Visual Studio Community Edition.
Assurez-vous que le débogage juste-à-temps est activé dansOutils>Options>Débogage>Juste-à-temps.
Pour cet exemple, vous allez créer une application console C# dans Visual Studio qui lève une NullReferenceException.
Dans Visual Studio, créez une application console C# (File>New>Project>Visual C#>Console Application) nommée ThrowsNullException. Pour plus d’informations sur la création de projets dans Visual Studio, consultez procédure pas à pas : Créer une application simple.
Lorsque le projet s’ouvre dans Visual Studio, ouvrez le fichier Program.cs. Remplacez la méthode Main() par le code suivant, qui imprime une ligne dans la console, puis lève une exception NullReferenceException :
static void Main(string[] args) { Console.WriteLine("we will now throw a NullReferenceException"); throw new NullReferenceException("this is the exception thrown by the console app"); }
Pour générer la solution, choisissez la configuration Déboguer (par défaut) ou Mise en production, puis sélectionnez Build>Solution de Rebuild.
Remarque
- Choisissez la configuration Déboguer pour l’expérience de débogage complète.
- Si vous sélectionnez la configuration Release, vous devez désactiver Just My Code pour que cette procédure fonctionne. Sous Outils>Options>Débogage, désélectionnez Activer Uniquement mon code.
Pour plus d’informations sur les configurations de build, consultez Présentation des configurations de build.
Ouvrez l’application générée ThrowsNullException.exe dans votre dossier de projet C# (...\ThrowsNullException\ThrowsNullException\bin\Debug ou ...\ThrowsNullException\ThrowsNullException\bin\Release).
La fenêtre de commande suivante doit s’afficher :
La boîte de dialogue Choisir un débogueur juste-à-temps s’ouvre.
Sous Débogueurs disponibles, sélectionnez Nouvelle instance de <votre version/édition> de Visual Studio préférée, si ce n’est pas déjà fait.
Sélectionnez OK.
Le projet ThrowsNullException s’ouvre dans une nouvelle instance de Visual Studio, avec l’exécution arrêtée à la ligne qui a provoqué l’exception :
Vous pouvez commencer le débogage à ce stade. Si vous déboguez une application réelle, vous devez découvrir pourquoi le code lève l’exception.
Attention
Si votre application contient du code non approuvé, une boîte de dialogue d’avertissement de sécurité s’affiche, ce qui vous permet de décider s’il faut poursuivre le débogage. Avant de continuer le débogage, déterminez si vous approuvez le code. Avez-vous écrit le code vous-même ? Si l’application s’exécute sur un ordinateur distant, reconnaissez-vous le nom du processus ? Si l’application s’exécute localement, envisagez la possibilité de code malveillant s’exécutant sur votre ordinateur. Si vous décidez que le code est fiable, sélectionnez OK. Sinon, sélectionnez Annuler.
Résoudre les problèmes de débogage juste-à-temps
Si le débogage juste-à-temps ne démarre pas lorsqu’une application plante, même si elle est activée dans Visual Studio :
Un problème Windows connu peut entraîner l’échec du débogueur Just-In-Time.
Le correctif consiste à ajouter une valeur DWORDdeauto, avec des données de valeur de 1, aux clés de Registre suivantes :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
(Pour les applications 32 bits sur des machines 64 bits) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
Le rapport d’erreurs Windows peut prendre en charge la gestion des erreurs sur votre ordinateur.
Pour résoudre ce problème, utilisez l’Éditeur de Registre pour ajouter une valeur DWORD désactivée, avecles données de valeur de 1, aux clés de Registre suivantes :
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
(Pour les applications 32 bits sur des machines 64 bits) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
Pour plus d’informations, consultez les paramètres .WER.
Vous pouvez voir les messages d’erreur suivants lors du débogage Just-In-Time :
Impossible de s'attacher au processus bloqué. Le programme spécifié n’est pas un programme Windows ou MS-DOS.
Le débogueur a essayé de s'attacher à un processus s'exécutant sous un autre utilisateur.
Pour contourner ce problème, dans Visual Studio, ouvrez Déboguer>Attacher au processus (ou appuyez sur Ctrl + Alt + P), puis recherchez le processus que vous souhaitez déboguer dans la liste Processus disponibles. Si vous ne connaissez pas le nom du processus, recherchez l’ID de processus dans la boîte de dialogue Visual Studio Just-In-Time Débogueur. Sélectionnez le processus dans la liste Processus disponibles et sélectionnez Attacher. Sélectionnez Non pour ignorer la boîte de dialogue débogueur juste-à-temps.
débogueur n’a pas pu être démarré, car aucun utilisateur n’est connecté.
Aucun utilisateur n’est connecté à la console, il n’y a donc pas de session utilisateur pour afficher le dialogue de débogage juste-à-temps.
Pour résoudre ce problème, connectez-vous à l’ordinateur.
classe non inscrite.
Le débogueur a essayé de créer une classe COM qui n’est pas inscrite, probablement en raison d’un problème d’installation.
Pour résoudre ce problème, utilisez Visual Studio Installer pour réinstaller ou réparer votre installation de Visual Studio.
Contenu connexe
- Sécurité du débogueur
- Premier aperçu du débogueur
- Options, Débogage, boîte de dialogue juste-à-temps
- Avertissement de sécurité : l’attachement à un processus appartenant à un utilisateur non approuvé peut être dangereux. Si les informations suivantes semblent suspectes ou que vous ne savez pas, ne vous attachez pas à ce processus