Déboguez à l’aide du débogueur juste-à-temps 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 juste-à-temps, vous pouvez tester des applications en dehors de Visual Studio et ouvrir Visual Studio pour commencer le débogage lorsqu’un problème se produit.

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 l’affichage de la boîte de dialogue Débogueur juste-à-temps, mais que Visual Studio n’est pas installé, consultez Désactiver le débogueur juste-à-temps. Si vous avez déjà installé Visual Studio, vous devrez peut-être désactiver le débogage juste-à-temps à partir du Registre Windows.

Activez ou désactivez le débogage juste-à-temps 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 juste-à-temps, vous devez exécuter Visual Studio en tant qu’administrateur. L'activation ou la désactivation du débogage juste-à-temps 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, faites un clic droit sur l’application Visual Studio et choisissez Exécuter en tant qu’administrateur.

Pour activer ou désactiver le débogage juste-à-temps :

  1. Dans le menu Outils ou Déboguer, sélectionnez Options>Débogage>Juste-à-temps.

    Enable or disable JIT debugging

    Note

    Si l’option de menu juste-à-temps ne s’affiche pas, vérifiez que le débogueur juste-à-temps est installé à l’aide de Visual Studio Installer.

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

  3. Sélectionnez OK.

Si vous activez le débogueur juste-à-temps, mais qu’il ne s’ouvre pas en cas de blocage ou d’erreurs d’une application, consultez Résoudre les problèmes de débogage juste-à-temps.

Désactivez le débogage juste-à-temps à partir du Registre Windows

Il se peut que le débogage juste-à-temps soit toujours 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 :

  1. Dans le menu Démarrer de Windows, exécutez l’Éditeur du Registre (regedit.exe).

  2. Dans la fenêtre Éditeur du Registre, recherchez et supprimez les entrées de Registre suivantes, le cas échéant :

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    JIT registry key

  3. Supprimez également les entrées de Registre suivantes, le cas échéant :

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

  4. Fermez la fenêtre Éditeur du Registre.

Activez le débogage juste-à-temps d’un Windows Form

Par défaut, les applications Windows Form ont 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 prise en charge, la boîte de dialogue suivante s’affiche :

Windows Form unhandled exception

Pour activer le débogage juste-à-temps au lieu de la gestion des erreurs Windows Form standard, ajoutez ces paramètres :

  • Dans la system.windows.formssection du fichier machine.config ou <nom de l'application>.exe.config, définissez la valeur jitDebugging surtrue :

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • Dans une application Windows Forms C++, définissez également DebuggableAttribute à true dans un fichier .config ou dans votre code. Si vous effectuez la compilation avec /Zi et sans /Og, le compilateur définit cet attribut pour vous. Cependant, si vous souhaitez déboguer une build de mise en production non optimisée, vous devez définir DebuggableAttribute 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 tout au long du débogage juste-à-temps lorsqu’une application lève une erreur.

  • Vous devez avoir installé Visual Studio pour suivre ces étapes. Si vous n’avez pas Visual Studio, vous pouvez télécharger l’édition gratuite Visual Studio Community.

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

  1. Dans Visual Studio, créez une application console C# (Fichier>Nouveau>Projet>Visual C#>Application Console) 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.

  2. 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 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");
    }
    
  3. 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.

    Notes

    • Choisissez la configuration Déboguer pour l’expérience de débogage complète.
    • Si vous sélectionnez Configuration de Mise en production, vous devez désactiver Uniquement mon 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.

  4. Ouvrez l’application générée ThrowsNullException.exe dans votre dossier de projet C# (...\ThrowsNullException\ThrowsNullException\bin\Debug ou ...\ThrowsNullException\ThrowsNullException\bin\Release).

    Vous devriez voir la fenêtre de commande suivante :

    Screenshot of the console for ThrowsNullException.exe, which throws an unhandled null reference exception (System.NullReferenceException).

  5. La boîte de dialogue Choisir un débogueur juste-à-temps s’ouvre.

    Screenshot of the Choose Just-In-Time Debugger dialog box, which appears after the exception appears in the ThrowsNullException.exe console window.

    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.

  6. 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 levé l’exception :

    Screenshot of the ThrowsNullException project in Visual Studio, with highlighting of the line of source code that threw the 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 si vous souhaitez poursuivre le débogage. Avant de continuer le débogage, déterminez si vous faites confiance au 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é que du code malveillant s’exécute 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 :

  • Il se peut qu’un problème Windows connu entraîne l’échec du débogueur juste-à-temps.

    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\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

    • (Pour les machines 32 bits) HKEY_LOCAL_MACHINE\SOFTWARE\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 DWORDdésactivée, avecles données de valeur de 1, aux clés de Registre suivantes :

    • HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    • (Pour les machines 32 bits) HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting

    Pour plus d’informations, consultez les paramètres .WER.

Vous pouvez voir les messages d’erreur suivants pendant le débogage juste-à-temps :

  • Impossible de s'attacher au processus bloqué. Le programme spécifié n'est pas un programme Windows ou MS-DOS.

    Le débogueur a tenté 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) et trouvez le processus que vous souhaitez déboguer dans la liste Processus disponibles. Si vous ne connaissez pas le nom du processus, trouvez l’ID de processus dans la boîte de dialogue Débogueur juste-à-temps de Visual Studio. 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.

  • Impossible de démarrer le débogueur, 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, ouvrez une session sur l'ordinateur.

  • Classe non inscrite.

    Le débogueur a tenté de créer une classe COM qui n’est pas enregistrée, 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.