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

S’applique à :yesVisual Studio noVisual Studio pour Mac noVisual Studio Code

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. 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. Si vous êtes familiarisé avec les commandes et raccourcis de navigation du débogueur, vous pouvez trouver et résoudre les problèmes d’application plus rapidement et plus facilement.

Notes

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

Entrer le mode arrêt

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 :

  • Commencez le code pas à pas en sélectionnant F10 ou F11. Cela vous permet de trouver rapidement le point d’entrée de votre application. Vous pouvez ensuite continuer à appuyer sur les commandes d’étape pour parcourir le code.

  • Exécutez-vous vers un emplacement ou une fonction spécifique, par exemple, en définissant un point d’arrêt et en démarrant votre application.

    Par exemple, dans l’éditeur de code de Visual Studio, vous pouvez utiliser la commande Exécuter au curseur pour démarrer l’application, le débogueur attaché et entrer en mode arrêt, puis sélectionner F11 pour parcourir le code :

    Animation that shows selecting Run To Cursor and then F11.

    Animation that shows selecting Run To Cursor and then F11.

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 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 de variable dans la fenêtre Variables locales ou l’évaluation des expressions dans la fenêtre Espion , sont disponibles uniquement lorsque le débogueur est suspendu (autrement dit, en mode arrêt).

Notes

Si vous entrez dans le code qui n’a pas de fichiers source ou symbole (.pdb) chargés, le débogueur affiche une page Fichiers sources introuvables ou Symboles introuvables qui peut vous aider à trouver et à charger les fichiers. Voir Spécifier des fichiers sources et des symboles (.pdb). 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écuter le code pas à pas

Les commandes d’étape du débogueur vous aident à inspecter l’état de votre application ou à en savoir plus sur son flux d’exécution.

Passer à la ligne de code par ligne

Pour arrêter chaque instruction lorsque vous déboguez, utilisezPas à pas détaillé> ou sélectionnez F11.

Le débogueur passe en revue les instructions de code, et non les 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 effectuez un pas à pas dans 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é sur un appel tel que Func1(Func2()), le débogueur effectue des étapes dans la fonction Func2.

Conseil

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

Parcourir le code et ignorer certaines fonctions

Vous ne vous souciez peut-être pas 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 clavier Commande du menu Déboguer Description
F10 Pas à pas principal Si la ligne active contient un appel de fonction, Step Over exécute le code, puis suspend l’exécution à la première ligne de code une fois la fonction appelée retournée.
Période de travail+F11 Pas à pas sortant Step Out poursuit l’exécution du code et suspend l’exécution lorsque la fonction actuelle retourne. Le débogueur passe par la fonction actuelle.

Exécuter vers 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ù vous souhaitez démarrer le débogage.

Exécuter vers 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 dans laquelle vous souhaitez suspendre l’exécution. Vous pouvez également sélectionner la ligne, puis sélectionner F9, >activer/désactiver le point d’arrêt, ou cliquer avec le bouton droit et sélectionnerPoint 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écuter 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>un point d’arrêtde 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. 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 :

Screenshot that shows breakpoints window.

Screenshot that shows breakpoints window.

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

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

  2. Dans la fenêtre Pile des appels , cliquez avec le bouton droit sur une fonction, puis sélectionnez Exécuter au curseur, ou appuyez sur Ctrl+F10.

Pour plus d’informations sur le traçage visuel de la pile des appels, consultez Méthodes mappées sur la pile des appels lors du débogage.

Exécuter vers un emplacement de curseur

Pour s’exécuter à 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 cliquez avec le bouton droit et sélectionnez Exécuter au curseur, ou appuyez sur Ctrl+F10. La sélection de l’option Exécuter au curseur ressemble à la définition d’un point d’arrêt temporaire.

Forcer l’exécution à un emplacement de curseur

Pour s’exécuter à 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 cliquez avec le bouton droit et sélectionnez Forcer l’exécution au curseur. La sélection forcer l’exécution au curseur ignore tous 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 sur une instruction dans le code source ou la fenêtre Désassembleur , puis sélectionner l’exécution de l’exécution vers cette flèche verte. Si vous utilisez Exécuter pour cliquer, vous n’avez pas besoin de définir un point d’arrêt temporaire.

Screenshot that shows Run to Click and the green arrow.

Notes

L’exécution de Click est disponible à partir de Visual Studio 2017.

Forcer l’exécution à cliquer

Pendant que le débogueur est suspendu, vous pouvez pointer sur une instruction dans le code source en appuyant sur la touche Maj , puis sélectionner Forcer l’exécution de l’exécution ici (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. Les points d’arrêt et les exceptions de première chance trouvées pendant l’exécution sont temporairement désactivés.

Screenshot that shows Force Run to Click.

Notes

Force Run to Click est disponible à partir de Visual Studio 2022.

S'arrêter manuellement dans le code

Pour basculer dans la ligne de code disponible suivante dans une application en cours d’exécution, sélectionnez Déboguer>tout, ou appuyez sur Ctrl Alt++Break.

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

Lorsque le débogueur est suspendu, une flèche jaune dans la marge du code source ou de la fenêtre Désassembleur marque l’emplacement de l’instruction qui s’exécute ensuite. Vous pouvez modifier l’instruction suivante qui s’exécutera en déplaçant cette flèche. Vous pouvez ignorer le code ou revenir à une ligne précédente. Le déplacement du pointeur est utile pour les situations telles que l’ignorer du code qui contient un bogue connu.

Animation that shows how to move the pointer.

Animation that shows how to move the pointer.

Si vous souhaitez modifier l’instruction suivante qui s’exécute, le débogueur doit être en mode arrêt. Dans la fenêtre code source ou Désassembler , faites glisser la flèche jaune vers une autre ligne, ou cliquez avec le bouton droit sur la ligne que vous souhaitez exécuter ensuite, puis sélectionnez Définir l’instruction Suivante.

Le compteur du programme passe directement au nouvel emplacement. Les instructions entre les anciens et les nouveaux points d’exécution ne sont pas exécutées. Toutefois, si vous déplacez le point d’exécution vers l’arrière, les instructions intermédiaires ne sont pas annulées.

Attention

  • Le déplacement de l’instruction suivante vers une autre fonction ou étendue entraîne généralement une altération de la pile des appels, ce qui provoque une erreur ou une exception d’exécution. Si vous essayez de déplacer l’instruction suivante vers une autre étendue, le débogueur vous donne un avertissement et une chance d’annuler l’opération.
  • Dans Visual Basic, vous ne pouvez pas déplacer l’instruction suivante vers une autre étendue ou fonction.
  • Dans C++natif, si vous avez activé les vérifications d’exécution, la définition de l’instruction suivante peut provoquer une exception lorsque l’exécution atteint la fin de la méthode.
  • Lorsque l’option Modifier et continuer est activée, l’instruction Set Next échoue si vous avez apporté des modifications qui modifient et continue ne peuvent pas remapiser immédiatement. Cette situation peut se produire, par exemple, si vous avez modifié du code dans un bloc catch. Lorsque cela se produit, un message d’erreur vous indique que l’opération n’est pas prise en charge.
  • Dans le code managé, vous ne pouvez pas déplacer l’instruction suivante si :
    • L'instruction suivante se trouve dans une méthode différente de celle de l'instruction actuelle.
    • Le débogage a été démarré par le débogage juste-à-temps.
    • Un déroulement de la pile d’appels est en cours.
    • Une exception System.StackOverflowException ou System.Threading.ThreadAbortException a été levée.

Déboguer 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é Just My 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 le personnaliser, consultez Just My 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ébogage), >> désactivez la case à cocher Activer uniquement mon code. Lorsque juste mon code est désactivé, le code non-utilisateur apparaît dans les fenêtres du débogueur et le débogueur peut passer au code non-utilisateur.

Notes

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

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.

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. Cliquez avec le bouton droit sur le module pour lequel vous souhaitez charger des symboles, puis sélectionnez Symboles de chargement.

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’étape dans les propriétés ou les opérateurs, sélectionnezOptionsde débogage>. Dans la page Débogage>général, décochez la case Pas à pas sur les propriétés et les opérateurs (Géré uniquement).

Voir aussi