Parcourir le Code avec le débogueur Visual StudioNavigate Code with the Visual Studio Debugger

Vous familiariser avec les commandes et des raccourcis pour parcourir le code dans le débogueur, et qui rend plus rapide et plus facile rechercher et résoudre les problèmes de votre application.Get familiar with commands and shortcuts to navigate code in the debugger and that will make it faster and easier to find and resolve issues in your app. Pendant que vous naviguez dans le code dans le débogueur, vous pouvez examiner l’état de votre application ou en savoir plus sur ses flux d’exécution.While you navigate code in the debugger, you can inspect the state of your app or learn more about its execution flow.

Démarrer le débogageStart debugging

Souvent, vous démarrez une session de débogage à l’aide F5 (déboguer > démarrer le débogage).Often, you start a debugging session using F5 (Debug > Start Debugging). Cette commande démarre votre application avec le débogueur attaché.This command starts your app with the debugger attached.

La flèche verte démarre également le débogueur (identique à F5).The green arrow also starts the debugger (same as F5).

DBG_notions de base_Démarrer_débogageDBG_Basics_Start_Debugging

Incluent d’autres manières que vous pouvez démarrer l’application avec le débogueur attaché F11 (pas à pas détaillé code), F10 (pas à pas principal code), ou par à l’aide de exécuter jusqu’au curseur.A few other ways that you can start the app with the debugger attached include F11 (step into code), F10 (step over code), or by using Run to Cursor. Consultez les autres sections de cette rubrique pour plus d’informations sur les opérations de ces options.See the other sections in this topic for info on what these options do.

Lorsque vous déboguez, la ligne jaune indique le code qui sera exécutée ensuite.When you debug, the yellow line shows you the code that will execute next.

DBG_Basics_Break_ModeDBG_Basics_Break_Mode

Pendant le débogage, vous pouvez basculer entre les commandes telles que F5, F11 et utiliser d’autres fonctionnalités décrites dans cette rubrique (comme les points d’arrêt) pour accéder rapidement au code que vous souhaitez consulter.While debugging, you can switch between commands like F5, F11 and use other features described in this topic (like breakpoints) to quickly get to the code you want to look at.

La plupart des fonctionnalités du débogueur, comme l’affichage des valeurs des variables 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 (également appelé en mode arrêt).Most debugger features, such as viewing variable values in the Locals window or evaluating expressions in the Watch window, are available only while the debugger is paused (also called break mode). Lorsque le débogueur est en pause, état de votre application est interrompue lors de fonctions, variables, et les objets restent en mémoire.When the debugger is paused, your app state is suspended while functions, variables, and objects remain in memory. En mode arrêt, vous pouvez examiner les positions et états à la recherche de violations ou de bogues.While in break mode, you can examine the elements' positions and states to look for violations or bugs. Pour certains types de projet, vous pouvez également effectuer des ajustements à l’application en mode arrêt.For some project types, you can also make adjustments to the app while in break mode. Pour visionner une vidéo ces fonctionnalités, consultez mise en route avec le débogueur.To watch a video showing these features, see Getting Started with the Debugger.

L’étape dans du code, ligne par ligneStep into code, line by line

Pour arrêter de chaque ligne de code (chaque instruction) pendant le débogage, utilisez le F11 raccourci clavier (ou déboguer > pas à pas détaillé dans le menu).To stop on each line of code (each statement) while debugging, use the F11 keyboard shortcut (or Debug > Step Into on the menu).

Conseil

Lorsque vous exécutez chaque ligne de code, vous pouvez pointer sur les variables à leurs valeurs, ou utiliser le variables locales et espion pour observer les modifier leurs valeurs.As you execute each line of code, you can hover over variables to see their values, or use the Locals and Watch windows to watch their values change.

Voici quelques détails sur le comportement du pas à pas détaillé:Here are some details about the behavior of Step Into:

  • Dans un appel à plusieurs fonctions imbriquées, Pas à pas détaillé va jusqu'à la fonction se trouvant au niveau le plus profond.On a nested function call, Step Into steps into the most deeply nested function. Si vous utilisez Pas à pas détaillé dans un appel tel que Func1(Func2()), le débogueur parcourt la fonction Func2.If you use Step Into on a call like Func1(Func2()), the debugger steps into the function Func2.

  • En fait, le débogueur parcourt les instructions de code plutôt que les lignes physiques.The debugger actually steps through code statements rather than physical lines. Par exemple, une clause if peut être écrite sur une ligne :For example an if clause can be written on one line:

    int x = 42;  
    string s = "Not answered";  
    if( int x == 42) s = "Answered!";  
    
    Dim x As Integer = 42  
    Dim s As String = "Not answered"  
    If x = 42 Then s = "Answered!"  
    

    Lorsque vous parcourez cette ligne, le débogueur traite la condition comme une étape et la conséquence comme une autre (dans cet exemple, la condition est remplie).When you step into this line, the debugger treats the condition as one step and the consequence as another (In this example, the condition is true).

    Pour suivre visuellement la pile des appels lors de l’exécution pas à pas dans les fonctions, consultez mapper les méthodes sur la pile des appels pendant le débogage.To visually trace the call stack while stepping into functions, see Map methods on the call stack while debugging.

Parcourir le code, ignorer des fonctionsStep through code, skipping functions

Lors de l’exécution de code dans le débogueur, fréquence à laquelle vous bénéficiez des avantages que vous n’avez pas besoin de voir ce qui se passe dans une fonction particulière (vous ne vous souciez il ou qu’elle fonctionne, comme le code de bibliothèque bien testé).When running code in the debugger, often you will realize that you don't need to see what happens in a particular function (you don't care about it or you know it works, like well-tested library code). Utilisez ces commandes pour parcourir le code (les fonctions s’exécutent toujours, bien sûr, mais le débogueur ignore les).Use these commands to skip through code (the functions still execute, of course, but the debugger skips over them).

Commande de clavierKeyboard Command Commande de menuMenu Command DescriptionDescription
F10F10 Pas à pas principalStep Over Si la ligne actuelle 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.If the current line contains a function call, Step Over runs the code then suspends execution at the first line of code after the called function returns.
MAJ + F11Shift+F11 Pas à pas sortantStep Out Pas à pas sortant continue l’exécution du code et suspend l’exécution lorsque la fonction en cours est retournée (le débogueur ignore via la fonction en cours).Step Out continues running code and suspends execution when the current function returns (the debugger skips through the current function).

Conseil

Si vous avez besoin rechercher le point d’entrée dans votre application, commencez par F10 ou F11.If you need to find the entry point in your app, start with F10 or F11. Ces commandes sont souvent utiles lorsque vous recherchez plus d’informations sur son flux d’exécution ou inspecter l’état de votre application.These commands are often helpful when you are inspecting your app state or trying to find out more about its execution flow.

Exécuter à un emplacement spécifique ou d’une fonctionRun to a specific location or function

Fréquence à laquelle la méthode recommandée de débogage de code, ces méthodes sont utiles lorsque vous savez exactement quel code que vous voulez inspecter, ou au moins vous savez où vous souhaitez démarrer le débogage.Often the preferred method of debugging code, these methods are useful when you know exactly what code you want to inspect, or at least you know where you want to start debugging.

  • Définir des points d'arrêt dans le codeSet breakpoints in the code

    Pour définir un point d'arrêt simple dans votre code, ouvrez le fichier source dans l'éditeur Visual Studio.To set a simple breakpoint in your code, open the source file in the Visual Studio editor. Définissez le curseur sur la ligne de code où vous souhaitez suspendre l’exécution, puis avec le bouton droit dans la fenêtre de code pour afficher le menu contextuel et choisissez point d’arrêt > Insérer un point d’arrêt (ou appuyez sur F9).Set the cursor at the line of code where you want to suspend execution, and then right-click in the code window to see the context menu and choose Breakpoint > Insert Breakpoint (or press F9). Le débogueur interrompt à droite de l’exécution avant l’exécution de la ligne.The debugger suspends execution right before the line is executed.

    Définir un point d’arrêtSet a breakpoint

    Les points d'arrêt dans Visual Studio fournissent un ensemble enrichi de fonctionnalités supplémentaires, telles que les points d'arrêt et les points de trace conditionnels.Breakpoints in Visual Studio provide a rich set of additional functionality, such as conditional breakpoints and tracepoints. Consultez à l’aide de points d’arrêt.See Using Breakpoints.

  • Exécuter le code jusqu'à l'emplacement du curseurRun to the cursor location

    Pour exécuter le code jusqu'à l'emplacement du curseur, placez le curseur sur une ligne de code exécutable dans une fenêtre source.To run to the cursor location, place the cursor on an executable line of code in a source window. Dans le menu contextuel de l’éditeur (avec le bouton droit dans l’éditeur), choisissez exécuter jusqu’au curseur.On the editor's context menu (right-click in the editor), choose Run to Cursor. Cela ressemble à définir un point d’arrêt temporaire.This is like setting a temporary breakpoint.

  • Exécuter à, cliquez surRun to Click

    Pour exécuter un point dans votre code pendant la suspension dans le débogueur, sélectionnez le exécuter ici icône de flèche verte (vous voyez l’icône tout en pointant sur une ligne de code).To run to a point in your code while paused in the debugger, select the Run execution to here green arrow icon (you see the icon while hovering over a line of code). Cela élimine le besoin de définir des points d’arrêt temporaires.This eliminates the need to set temporary breakpoints.

    Exécution du débogueur. Cliquez ensuite surDebugger's Run to Click

    Note

    Cliquez sur exécuter est une nouveauté de Visual Studio 2017Visual Studio 2017.Run to Click is new in Visual Studio 2017Visual Studio 2017.

  • S'arrêter manuellement dans le codeManually break into code

    Pour vous arrêter sur la ligne de code suivante disponible dans une application en cours d'exécution, choisissez Déboguer, Interrompre tout (raccourci : Ctrl+Alt+Break).To break into the next available line of code in an executing app, choose Debug, Break All (keyboard: Ctrl+Alt+Break).

    Si vous arrêtez l’exécution de code sans les fichiers sources ou de symboles (.pdb) correspondants, le débogueur affiche une page Fichiers sources introuvables ou Symboles introuvables qui peut vous aider à trouver les fichiers appropriés.If you break while executing code without corresponding source or symbol (.pdb) files), the debugger displays a Source Files Not Found or a Symbols Not Found page that can help you find the appropriate files. Consultez spécifier les symboles (.pdb) et les fichiers sources.See Specify Symbol (.pdb) and Source Files. Si vous ne pouvez pas accéder aux fichiers de prise en charge, vous pouvez tout de même déboguer les instructions assembleur dans la fenêtre Code Machine.If you can't access the supporting files, you can still debug the assembly instructions in the Disassembly window.

  • Exécuter le code jusqu'à une fonction de la pile des appelsRun to a function on the call stack

    Dans le pile des appels fenêtre (disponible lors du débogage), sélectionnez la fonction, avec le bouton droit et choisissez exécuter jusqu’au curseur.In the Call Stack window (available while debugging), select the function, right-click and choose Run to Cursor. Pour suivre visuellement la pile des appels, consultez mapper les méthodes sur la pile des appels pendant le débogage.To visually trace the call stack, see Map methods on the call stack while debugging.

  • Exécuter le code jusqu'à une fonction spécifiée par nomRun to a function specified by name

    Vous pouvez demander au débogueur d’exécuter votre application jusqu'à ce qu’il atteigne une fonction spécifiée.You can tell the debugger to run your application until it reaches a specified function. Vous pouvez spécifier la fonction par nom ou la sélectionner dans la pile des appels.You can specify the function by name or you can choose it from the call stack.

    Pour spécifier une fonction par nom, choisissez Déboguer, Nouveau point d'arrêt, Interrompre à la fonction, puis tapez le nom de la fonction et d'autres informations d'identification.To specify a function by name, choose Debug, New Breakpoint, Break at Function, then enter the name of the function and other identifying information.

    Boîte de dialogue Nouveau point d’arrêtNew Breakpoint dialog box

    Si la fonction est surchargée ou si elle figure dans plusieurs espaces de noms, vous pouvez choisir les fonctions souhaitées dans la boîte de dialogue Choisir les points d'arrêt .If the function is overloaded or is in multiple namespace, you can choose the functions that you want in the Choose Breakpoints dialog box.

    Choisissez la boîte de dialogue points d’arrêtChoose Breakpoints dialog box

Déplacez le pointeur pour modifier le flux d’exécutionMove the pointer to change the execution flow

Lorsque le débogueur est suspendu, vous pouvez déplacer le pointeur d’instruction pour définir l’instruction suivante de code à exécuter.While the debugger is paused, you can move the instruction pointer to set the next statement of code to be executed. Dans la marge d'une fenêtre source ou Code Machine, une flèche jaune marque l'emplacement de la prochaine instruction à exécuter.A yellow arrowhead in the margin of a source or Disassembly window marks the location of the next statement to be executed. Déplacer cette flèche permet d'ignorer une partie du code ou de revenir à une ligne déjà exécutée.By moving this arrowhead, you can skip over a portion of code or return to a line previously executed. Vous pouvez utiliser cette fonctionnalité, par exemple, pour ignorer une section de code qui contient un bogue connu.You can use this for situations such as skipping a section of code that contains a known bug.

Déplacer le pointeurMoving the Pointer

Pour définir l'instruction suivante à exécuter, appliquez l'une de ces procédures :To set the next statement to execute, use one of these procedures:

  • Dans une fenêtre source, faites glisser la flèche jaune vers l'emplacement où vous souhaitez définir l'instruction suivante dans le même fichier source.In a source window, drag the yellow arrowhead to a location where you want to set the next statement in the same source file

  • Dans une fenêtre source, définissez le curseur sur la ligne que vous souhaitez exécuter ensuite, avec le bouton droit et choisissez définir l’instruction suivante.In a source window, set the cursor on the line that you want to execute next, right-click and choose Set Next Statement.

  • Dans la fenêtre code machine, définissez le curseur sur l’instruction d’assembly que vous souhaitez exécuter ensuite, cliquez sur un et choisissez définir l’instruction suivante.In the Disassembly window, set the cursor on the assembly instruction that you want to execute next, right-click an and choose Set Next Statement.

Attention

Le fait de définir l'instruction suivante fait en sorte que le compteur du programme accède directement au nouvel emplacement.Setting the next statement causes the program counter to jump directly to the new location. Utilisez cette commande avec précaution :Use this command with caution:

  • Les instructions entre les nouveaux et les anciens points d'exécution ne sont pas exécutées.Instructions between the old and new execution points are not executed.
    • Si vous déplacez le point d'exécution vers l'arrière, les instructions déjà traitées ne sont pas annulées.If you move the execution point backwards, intervening instructions are not undone.
    • Le déplacement de l'instruction suivante vers une autre fonction ou portée entraîne généralement une altération de la pile des appels, provoquant une erreur ou exception d'exécution.Moving the next statement to another function or scope usually results in call-stack corruption, causing a run-time error or exception. Si vous tentez de déplacer l'instruction suivante vers une autre portée, le débogueur ouvre une boîte de dialogue avec un avertissement et vous donne une occasion d'annuler l'opération.If you try moving the next statement to another scope, the debugger opens a dialog box with a warning and gives you a chance to cancel the operation. En Visual Basic, vous ne pouvez pas déplacer l'instruction suivante à une autre portée ou fonction.In Visual Basic, you cannot move the next statement to another scope or function.
    • En C++ natif, si les contrôles d'exécution sont activés, la définition de l'instruction suivante peut provoquer la levée d'une exception lorsque l'exécution atteint la fin de la méthode.In native C++, if you have run-time checks enabled, setting the next statement can cause an exception to be thrown when execution reaches the end of the method.
    • Lorsque Modifier & Continuer est activé, la commande Définir l'instruction suivante échoue si vous avez apporté des modifications qui ne peuvent pas être remappées immédiatement par Modifier & Continuer.When Edit and Continue is enabled, Set Next Statement fails if you have made edits that Edit and Continue cannot remap immediately. Par exemple, cela peut se produire si vous avez modifié le code contenu dans un bloc catch.This can occur, for example, if you have edited code inside a catch block. Dans ce cas, vous verrez un message d’erreur indiquant que l’opération n’est pas pris en charge.When this happens, you'll see an error message that tells you that the operation is not supported.

Note

Dans du code managé, vous ne pouvez pas déplacer l'instruction suivante dans les conditions suivantes :In managed code, you cannot move the next statement under the following conditions:

  • L'instruction suivante se trouve dans une méthode différente de celle de l'instruction actuelle.The next statement is in a different method than the current statement.
    • Le débogage a été démarré à l'aide du débogage juste-à-temps.Debugging was started by using Just-In-Time debugging.
    • Le déroulement d'une pile des appels est en cours.A callstack unwind is in progress.
    • Une exception System.StackOverflowException ou System.Threading.ThreadAbortException a été levée.A System.StackOverflowException or System.Threading.ThreadAbortException exception has been thrown.

Il est impossible de définir l'instruction suivante lorsque l'application est active.You cannot set the next statement while your application is actively running. Pour définir l'instruction suivante, le débogueur doit être en mode arrêt.To set the next statement, the debugger must be in break mode.

Pas à pas détaillé code non-utilisateurStep into non-user code

Par défaut, le débogueur essaie d’afficher uniquement votre code d’application pendant le débogage, qui est déterminé par un débogueur appelé uniquement mon Code.By default, the debugger tries to show you only your app code while debugging, which is determined by a debugger setting called Just My Code. (Consultez uniquement mon Code pour voir comment cela fonctionne pour les langues et différents types de projet et comment vous pouvez personnaliser le comportement.) Cependant, parfois pendant le débogage, vous pouvez souhaiter examiner du code framework, votre code de bibliothèque tierce ou les appels au système d’exploitation (appels système).(See Just My Code to see how this works for different project types and languages and how you might customize the behavior.) However, sometimes while you are debugging, you might want to look at framework code, third-party library code, or calls to the operating system (system calls).

Vous pouvez désactiver uniquement mon Code en accédant à outils > Options > débogage et désactivez la activer uniquement mon Code case à cocher.You can turn off Just My Code by going to Tools > Options > Debugging and clear the Enable Just My Code checkbox.

Lorsque uniquement mon Code est désactivée, le débogueur peut exécuter dans le code de non-utilisateur et code non-utilisateur apparaît dans les fenêtres du débogueur.When Just My Code is disabled, the debugger can step into non-user code and non-user code appears in the debugger windows.

Note

Uniquement mon code n'est pas pris en charge pour les projets Smart Device.Just My Code is not supported for device projects.

Effectuer un pas à pas détaillé dans des appels systèmeStep into system calls

Si vous avez chargé des symboles de débogage pour le code système et uniquement mon Code n’est pas activé, vous pouvez exécuter dans un appel système tout comme n’importe quel autre appel.If you have loaded debugging symbols for system code and Just My Code is not enabled, you can step into a system call just as you can any other call.

Pour accéder aux fichiers de symboles Microsoft, consultez utiliser des serveurs de symboles pour rechercher des fichiers de symboles pas sur votre ordinateur local dans les spécifier de symboles (.pdb) et les fichiers sources rubrique.To access Microsoft symbol files, see Use symbol servers to find symbol files not on your local machine in the Specify Symbol (.pdb) and Source Files topic.

Pour charger des symboles pour un composant système spécifique lors du débogage :To load symbols for a specific system component while you are debugging:

  1. Ouvrez la fenêtre Modules (clavier : Ctrl + Alt + U).Open the Modules window (keyboard: Ctrl + Alt + U).

  2. Sélectionnez le module pour lequel vous souhaitez charger des symboles.Select the module that you want to load symbols for.

    Consultez la colonne État du symbole pour connaître les modules qui possèdent des symboles chargés.You can tell which modules have symbols loaded by looking at the Symbol Status column.

  3. Choisissez Charger les symboles dans le menu contextuel.Choose Load Symbols on the context menu.

Effectuer un pas à pas détaillé dans des propriétés et des opérateurs au sein du code managéStep into properties and operators in managed code

Par défaut, le débogueur effectue un pas à pas principal sur les propriétés et les opérateurs dans le code managé.The debugger steps over properties and operators in managed code by default. Dans la plupart des cas, cela fournit une meilleure expérience de débogage.In most cases, this provides a better debugging experience. Pour activer le pas à pas détaillé dans les propriétés ou des opérateurs, choisissez déboguer > Options.To enable stepping into properties or operators, choose Debug > Options. Sur le débogage > général page, désactivez la pas à pas principal des propriétés et les opérateurs (managé uniquement) case à cocherOn the Debugging > General page, clear the Step over properties and operators (Managed only) check box