Naviguez dans le code à l’aide du débogueur Visual Studio

Le débogueur Visual Studio peut vous aider à parcourir le code pour inspecter l’état d’une application et afficher son flux d’exécution, également appelé exécution de code pas à pas. Vous pouvez utiliser des raccourcis clavier, des commandes de débogage, des points d’arrêt et d’autres fonctionnalités pour accéder rapidement au code que vous souhaitez examiner. En vous familiarisant avec les raccourcis et les commandes de navigation du débogueur, vous pouvez trouver et résoudre les problèmes d’application plus rapidement et plus facilement. Pour obtenir la liste des raccourcis clavier les plus courants liés à la navigation et au débogage du code, consultez la section Débogage dans Raccourcis clavier.

Notes

Si vous débutez avec le débogage de code, vous pouvez lire Débogage pour les débutants absolus et Techniques et outils de débogage avant de lire cet article.

Démarrer le débogage et entrer en mode arrêt

Certaines commandes de navigation démarrent votre application et attachent automatiquement le débogueur. Votre application s’interrompt sur une ligne de code spécifique en fonction de la commande que vous avez utilisée pour démarrer la navigation et vous entrez en mode arrêt (autrement dit, votre application est suspendue dans le débogueur).

En mode arrêt, l’exécution de l’application est suspendue pendant que les fonctions, les variables et les objets restent en mémoire. Lorsque le débogueur est en mode arrêt, vous pouvez parcourir votre code. Il existe deux façons courantes d’entrer rapidement en mode arrêt :

Les commandes de pas à pas de code peuvent être utilisées pour démarrer votre application, mais sont plus couramment utilisées après avoir entré le mode arrêt.

Certaines commandes de navigation sont principalement utilisées en mode arrêt (autrement dit, pendant que vous êtes suspendu dans le débogueur).

Débogage et mode arrêt

Lorsque vous êtes en mode arrêt, vous pouvez utiliser différentes commandes pour naviguer dans votre code. Vous pouvez examiner les valeurs des variables pour rechercher des violations ou des bogues. Pour certains types de projets, vous pouvez également apporter des ajustements à l’application lorsque vous êtes en mode arrêt.

La plupart des fenêtres du débogueur, comme les fenêtres Modules et Espion, sont disponibles uniquement lorsque le débogueur est attaché à votre application. Certaines fonctionnalités du débogueur, telles que l’affichage des valeurs des variables dans la fenêtre Locals ou l’évaluation des expressions dans la fenêtre Espion, sont disponibles uniquement lorsque le débogueur est suspendu (c’est-à-dire en mode arrêt).

Notes

Si vous entrez dans un code dont les fichiers source ou symbole (.pdb) ne sont pas chargés, le débogueur affiche une page Fichiers source introuvables ou Symboles introuvables qui peut vous aider à trouver et à charger les fichiers. Consultez Spécifier les fichiers de symbole (.pdb) et les fichiers sources. Si vous ne pouvez pas charger le symbole ou les fichiers sources, vous pouvez toujours déboguer les instructions d’assembly dans la fenêtre Désassemblage.

Exécution de code pas à pas

Le pas à pas de code fait référence à l’exécution de votre code d’application une instruction à la fois, avec le débogueur attaché. Les commandes d’étape du débogueur vous aident à observer les effets de chaque instruction et à en savoir plus sur son flux d’exécution.

Entrez dans le code

Pour vous arrêter sur chaque instruction lorsque vous déboguez, utilisez Déboguer>Pas à pas détaillé ou sélectionnez F11.

Le débogueur effectue des étapes par le biais d’instructions de code, pas de lignes physiques. Par exemple, une clause if peut être écrite sur une ligne :

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

Mais lorsque vous parcourez cette ligne, le débogueur traite la condition comme une étape et la conséquence comme une autre. Dans l’exemple précédent, la condition est vraie.

Dans un appel à plusieurs fonctions imbriquées, Pas à pas détaillé va jusqu'à la fonction se trouvant au niveau le plus profond. Par exemple, si vous utilisez Pas à pas détaillé dans un appel tel que Func1(Func2()), le débogueur parcourt la fonction Func2.

Conseil

Lorsque vous exécutez chaque ligne de code, vous pouvez pointer sur les variables pour afficher leurs valeurs, ou utiliser les fenêtres Local et Espion pour observer les modifications des valeurs. Vous pouvez également suivre visuellement la pile des appels pendant que vous effectuez un pas à pas détaillé dans des fonctions. (Pour Visual Studio Enterprise uniquement, consultez Mapper des méthodes sur la pile des appels lors du débogage.)

Parcourez le code et ignorez certaines fonctions

Vous risquez de ne pas vous soucier d’une fonction lorsque vous déboguez. Ou vous pouvez également savoir que du code fonctionne, comme du code de bibliothèque bien testé. Vous pouvez utiliser les commandes suivantes pour ignorer le code lorsque vous effectuez un pas à pas de code. Les fonctions s’exécutent toujours, mais le débogueur les ignore.

Commande de clavier Commande du menu Déboguer Description
F10 Pas à pas principal Si la ligne active contient un appel de fonction, Pas à pas principal exécute le code, puis suspend l’exécution à la première ligne de code après le retour de la fonction appelée.
Maj+F11 Pas à pas sortant Pas à pas sortant continue d’exécuter du code et interrompt l’exécution lorsque la fonction actuelle revient. Le débogueur passe par la fonction actuelle.

Exécutez à un emplacement ou une fonction spécifique

Vous préférerez peut-être exécuter directement à un emplacement ou une fonction spécifique lorsque vous savez exactement quel code vous souhaitez inspecter ou si vous savez où commencer le débogage.

  • La définition d’un point d’arrêt est optimale si vous pensez que vous souhaiterez peut-être réutiliser le point d’arrêt.
  • D’autres méthodes sont pratiques et sont similaires à la définition d’un point d’arrêt temporaire.

Exécutez jusqu’à un point d’arrêt dans le code

Pour définir un point d’arrêt simple dans votre code, sélectionnez la marge située à l’extrême gauche en regard de la ligne de code où vous souhaitez interrompre l’exécution. Vous pouvez également sélectionner la ligne, puis appuyer sur F9, sélectionner Déboguer>Désactiver le point d’arrêt, ou faire un clic droit et sélectionner Point d’arrêt>Insérer un point d’arrêt. Le point d’arrêt apparaît sous la forme d’un point rouge dans la marge gauche en regard de la ligne de code. Le débogueur suspend l’exécution juste avant l’exécution de la ligne.

Screenshot that shows how to set a breakpoint.

Screenshot that shows how to set a breakpoint.

Les points d’arrêt dans Visual Studio fournissent un ensemble complet de fonctionnalités, comme les points d’arrêt conditionnels et les points de trace. Pour plus d’informations, consultez Utilisation de points d’arrêt.

Exécutez vers un point d’arrêt de fonction

Vous pouvez définir le débogueur à exécuter jusqu’à ce qu’il atteigne une fonction spécifiée. Vous pouvez spécifier la fonction par nom ou la sélectionner dans la pile des appels.

Pour spécifier un point d’arrêt de fonction par nom :

  1. Sélectionnez Déboguer>Nouveau point d’arrêt>Fonction de point d’arrêt.

  2. Dans la boîte de dialogue Nouveau point d’arrêt de fonction, entrez le nom de la fonction et sélectionnez sa langue :

    Screenshot that shows the New Function Breakpoint dialog.

    Screenshot that shows the New Function Breakpoint dialog.

  3. Cliquez sur OK.

Si la fonction est surchargée ou dans plusieurs espaces de noms, vous pouvez choisir celle souhaitée dans la fenêtre Points d’arrêt :

Screenshot that shows breakpoints window.

Screenshot that shows breakpoints window.

Pour sélectionner un point d’arrêt de fonction dans la pile des appels :

  1. Pendant le débogage, ouvrez la fenêtre Pile des appels en sélectionnant Déboguer>Pile des appels>Windows.

  2. Dans la fenêtre Pile des appels, faites un clic droit sur une fonction et sélectionnez Exécuter au curseur, ou appuyez sur Ctrl+F10.

Pour plus d’informations sur le suivi visuel de la pile des appels, consultez Mapper les méthodes sur la pile des appels lors du débogage.

Exécutez vers un emplacement de curseur

Pour exécuter jusqu’à l’emplacement du curseur, dans le code source ou la fenêtre Pile des appels, sélectionnez la ligne à laquelle vous souhaitez vous arrêter, puis faites un clic droit et sélectionnez Exécuter au curseur, ou sélectionnez Ctrl+F10. Sélectionner Exécuter au curseur revient à définir un point d’arrêt temporaire.

Forcez l’exécution vers un emplacement de curseur

Pour s’exécuter à l’emplacement du curseur, dans le code source ou dans la fenêtre Pile des appels, sélectionnez la ligne à laquelle vous souhaitez vous arrêter, puis faites un clic droit et sélectionnez Forcer l’exécution au curseur. Si vous sélectionnez Forcer l’exécution au curseur, vous ignorez les points d’arrêt et les exceptions de première chance jusqu’à ce que le débogueur atteigne la ligne de code où se trouve le curseur.

Exécuter jusqu’au clic

Pendant que le débogueur est suspendu, vous pouvez pointer le curseur sur une instruction dans le code source ou la fenêtre Désassemblage et sélectionner la flèche verte Exécuter l’exécution ici. L’utilisation de Run to Click est similaire à la définition d’un point d’arrêt temporaire.

Screenshot that shows Run to Click and the green arrow.

Note

Exécuter jusqu’au clic est disponible à partir de Visual Studio 2017.

Forcer l’exécution jusqu’au clic

Pendant que le débogueur est suspendu, vous pouvez pointer le curseur sur une instruction dans le code source en appuyant sur la touche Maj, puis sélectionner Forcer l’exécution à cet endroit (la double flèche verte). Lorsque vous choisissez cette option, l’application attache le débogueur Visual Studio et s’interrompt à l’emplacement du curseur. Tous les points d’arrêt et les exceptions de première chance trouvés pendant l’exécution sont temporairement désactivés.

Screenshot that shows Force Run to Click.

Note

Forcez l’exécution jusqu’au clic est disponible à partir de Visual Studio 2022.

S'arrêter manuellement dans le code

Pour passer à la ligne de code disponible suivante dans une application en cours d’exécution, sélectionnez Déboguer>Tout arrêter ou Ctrl+Alt+Break.

Déboguez du code non utilisateur

Par défaut, le débogueur tente de déboguer uniquement le code de votre application en activant un paramètre appelé Uniquement mon code. Pour plus d’informations sur le fonctionnement de cette fonctionnalité pour différents types de projets et langages, et sur la façon dont vous pouvez la personnaliser, consultez Uniquement mon code.

Pour examiner le code d’infrastructure, le code des bibliothèques tierces ou les appels système lors du débogage, vous pouvez désactiver Uniquement mon code. Dans Outils (ou Déboguer) >Options>Débogage, décochez la case Activer Uniquement mon code. Lorsque Uniquement mon code est désactivé, le code non-utilisateur apparaît dans les fenêtres du débogueur, et le débogueur peut entrer dans le code non-utilisateur.

Notes

Uniquement mon code n’est pas pris en charge pour les projets d’appareil.

Déboguez le code système

Si vous avez chargé des symboles de débogage pour le code système Microsoft et désactivé Uniquement mon code, vous pouvez effectuer un pas à pas détaillé dans un appel système tout comme s'il s'agissait de n'importe quel autre appel.

À compter de Visual Studio 2022 version 17.7, vous pouvez décompiler automatiquement le code .NET lors de l’exécution pas à pas dans le code externe sans avoir à charger manuellement les symboles de débogage. Pour plus d’informations, veuillez consulter la rubrique Générer du code source à partir des assemblies .NET lors du débogage.

Pour en savoir plus sur le chargement des symboles Microsoft, consultez Configurer l’emplacement des fichiers de symboles et les options de chargement.

Pour charger des symboles pour un composant système spécifique :

  1. Pendant le débogage, ouvrez la fenêtre Modules en sélectionnant Déboguer>Windows>Modules ou en appuyant sur Ctrl+Alt+U.

  2. Dans la fenêtre Modules, vous pouvez indiquer quels modules ont des symboles chargés dans la colonne État des symboles. Faites un clic droit sur le module dont vous souhaitez charger les symboles, puis sélectionnez Charger les symboles.

Effectuer un pas à pas détaillé dans des propriétés et des opérateurs au sein du code managé

Par défaut, le débogueur effectue un pas à pas principal sur les propriétés et les opérateurs dans le code managé. Dans la plupart des cas, ce comportement offre une meilleure expérience de débogage. Pour désactiver l’entrée pas à pas dans des propriétés ou des opérateurs, sélectionnezDéboguer>Options. Dans la page Débogage>Général, désactivez la case à cocher Pas à pas principal dans les propriétés et les opérateurs (Géré uniquement).

Déplacez le pointeur pour modifier le flux d’exécution

Vous pouvez modifier l’instruction suivante qui s’exécutera en déplaçant le pointeur d’exécution jaune. Vous pouvez utiliser cette fonctionnalité en mode arrêt.

Il s’agit d’une fonctionnalité de débogueur avancée. Pour plus d’informations, consultez Déplacer le pointeur d’exécution.