Parcourir 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 commandes de navigation et les raccourcis 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éboguer dans les raccourcis clavier.
Remarque
Si vous débutez avec le débogage du 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 pause
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 pause, vous pouvez parcourir votre code. Il existe deux façons très courantes d’entrer rapidement en mode arrêt :
définir un point d’arrêt et démarrer votre application.
Exécutez à un emplacement ou une fonction spécifique.
Par exemple, dans l’éditeur de code de Visual Studio, vous pouvez utiliser la commande Exécuter au curseur pour démarrer l’application, avec le débogueur attaché et entrer en mode arrêt. Vous pouvez ensuite utiliser des commandes d’étape pour naviguer dans le code.
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.
Naviguer dans le code en mode arrêt
Certaines commandes de navigation sont principalement utilisées en mode arrêt (pendant que vous êtes en pause dans le débogueur).
Les commandes de pas à pas de code sont les plus couramment utilisées en mode arrêt.
Certaines commandes telles que Exécuter pour cliquer sur ne peuvent être utilisées qu’en mode arrêt.
Débogage et mode arrêt
Lorsque vous êtes en mode arrêt, vous pouvez utiliser différentes commandes pour parcourir 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 modules et Watch windows, 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 (autrement dit, en mode pause).
Remarque
Si vous exécutez du code qui n’a pas de fichiers source ou de symboles (.pdb) chargés, le débogueur affiche une page Fichiers sources introuvables ou Symboles introuvables afin de 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ésassembleur.
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 s'arrêter à chaque instruction lorsque vous déboguez, utilisez Déboguer>Entrer dans, 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 :
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 survoler les variables pour afficher leurs valeurs, ou utiliser les fenêtres Variables locales et Surveillance pour observer les changements de 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 savez peut-être 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 par clavier | Commande de menu débogage | Description |
---|---|---|
F10 | Pas à pas principal | Si la ligne actuelle contient un appel de fonction, pas à pas exécute le code, puis suspend l’exécution à la première ligne de code une fois la fonction appelée retourné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érez peut-être exécuter directement vers un emplacement ou une fonction spécifique lorsque vous connaissez exactement le code que vous souhaitez inspecter ou si vous savez où vous souhaitez démarrer 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 à gauche en regard de la ligne de code où vous souhaitez suspendre 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.
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 configurer le débogueur pour s'exécuter jusqu'à ce qu'il atteigne une fonction spécifiée. Vous pouvez spécifier la fonction par nom, ou vous pouvez la choisir dans la pile des appels.
Pour spécifier un point d’arrêt de fonction par nom :
Sélectionnez Déboguer>Nouveau point d’arrêt>Fonction de point d’arrêt.
Dans la boîte de dialogue Nouveau point d’arrêt de fonction, entrez le nom de la fonction et sélectionnez sa langue :
Sélectionnez 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 :
Pour sélectionner un point d’arrêt de fonction dans la pile des appels :
Pendant le débogage, ouvrez la fenêtre Pile des appels en sélectionnant Déboguer>Pile des appels>Windows.
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.
Remarque
Run to Click est disponible depuis 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.
Remarque
Forcez l’exécution jusqu’au clic est disponible à partir de Visual Studio 2022.
Décomposer manuellement 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é Simplement 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 Juste mon code.
Pour examiner le code d’infrastructure, le code de bibliothèque tiers 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 Just My Code est désactivé, le code non-utilisateur apparaît dans les fenêtres du débogueur, et le débogueur peut entrer dans ce code non-utilisateur.
Remarque
Just My Code n'est pas pris en charge pour les projets d'appareils.
Déboguer le code système
Si vous avez chargé des symboles de débogage pour le code système Microsoft et désactivé Just My Code, vous pouvez passer un appel système tout comme vous pouvez n’importe quel autre appel.
À compter de Visual Studio 2022 version 17.7, vous pouvez décompiler automatiquement le code .NET au sein du code externe sans avoir à charger manuellement les symboles de débogage. Pour plus d’informations, consultez Générer du code source à partir d’assemblys .NET pendant le 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 :
Pendant le débogage, ouvrez la fenêtre Modules en sélectionnant Déboguer>Windows>Modules ou en appuyant sur Ctrl+Alt+U.
Dans la fenêtre Modules, vous pouvez indiquer quels modules ont des symboles chargés dans la colonne État des symboles. Cliquez avec le bouton droit sur le module pour lequel vous souhaitez charger des symboles, puis sélectionnez Charger des symboles.
Explorez les propriétés et les opérateurs dans le code géré
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 activer 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éplacer 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.