Partager via


Points d'arrêt : utiliser les nombres d'accès, les fonctions de la pile des appels et les conditions d'arrêt quand et où vous le voulez dans le débogueur Visual Studio

Définir des points d'arrêt pour les lignes sources, les instructions d'assembly et la fonction de la pile des appels. Spécifier les conditions, les nombres d'accès et l'emplacement d'exécution. Imprimer avec des points de trace. Enregistrer et importer des points d'arrêt.

Sommaire

Create breakpoints that break when you want

Set a breakpoint at a source line, assembly instruction, or call stack function

Access the advanced functionality of breakpoints

Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Print to the Output window with tracepoints

Manage breakpoints in the Breakpoints window

Troubleshoot breakpoints

Breakpoint Glyphs Reference

Créer des points d'arrêt qui s'arrêtent lorsque vous le souhaitez

Les points d'arrêt standard, qui arrêtent l'exécution du débogueur chaque fois qu'un emplacement de fichier source est trouvé, sont l'une des techniques de débogage les plus importantes dans la boîte à outils du développeur. Visual Studio vous aide à aller au-delà des points d'arrêt standard et à créer un contrôle précis sur le moment et l'emplacement d'exécution d'un point d'arrêt.

  • Vous pouvez définir des points d'arrêt à l'exécution qui interrompent l'exécution lorsque votre programme revient à une fonction de la pile des appels et éviter une longue série de commandes Pas à pas sortant.

  • Si vous pensez qu'une boucle de votre code commence à avoir un comportement anormal après un certain nombre d'itérations, vous pouvez définir un point d'arrêt pour arrêter l'exécution après un nombre de tentatives spécifié vers la ligne de code associée, au lieu de devoir appuyer à plusieurs reprises sur F5 (Déboguer, Continuer) pour atteindre le niveau d'itération.

  • En utilisant des expressions de code, vous pouvez spécifier les conditions exactes auxquelles un point d'arrêt s'arrête.

Vous pouvez utiliser la fenêtre Points d'arrêt pour gérer l'état et le comportement d'un grand nombre de points d'arrêt. Si vous avez soigneusement construit une séquence de points d'arrêt pour diagnostiquer un problème courant ou particulièrement complexe, vous pouvez enregistrer ou partager ces points d'arrêt à l'aide des commandes d'importation et d'exportation de la fenêtre Points d'arrêt.

Avertissement

Évitez de définir des points d'arrêt sur des composants du système lorsque vous déboguez du code mixte (natif et managé).le Common Language Runtime risquerait alors de s'interrompre et le débogueur de cesser de répondre.

Retour au débutContents

Définir un point d'arrêt à une ligne source, une instruction d'assembly ou une fonction de pile des appels

  • Set a breakpoint in a source file • Set a breakpoint at a function return in the Call Stack window • Set a breakpoint at an assembly instruction in the Disassembly window

Définir un point d'arrêt dans un fichier source

Voici deux techniques pour définir un point d'arrêt standard dans une fenêtre source :

  • Double-cliquez dans la marge de la fenêtre au niveau de la ligne où vous voulez couper.

    ou

  • Sélectionnez la ligne et choisissez F9.

Point d'arrêt dans la fenêtre Pile des appels

L'icône du point d'arrêt apparaît dans la marge.

Pour dessiner visuellement des points d'arrêt pendant l'exécution du code, consultez Mapper les méthodes sur la pile des appels tout en déboguant dans Visual Studio.

Retour au début Set a breakpoint at a source line, assembly instruction, or call stack function

Retour au débutContents

Définir un point d'arrêt à un retour de fonction dans la fenêtre Pile des appels

Vous pouvez arrêter l'exécution à l'instruction ou à la ligne à laquelle une fonction appelante retourne en définissant un point d'arrêt dans la fenêtre Pile des appels. Assurez-vous que le débogueur est en mode arrêt.

  • Ouvrez la fenêtre Pile des appels (raccourci : Ctrl + Alt + C), puis sélectionnez la fonction d'appel à arrêter.

  • Sélectionnez Point d'arrêt, Insérer un point d'arrêt dans le menu contextuel, ou utilisez simplement le raccourci : F9.

Un symbole de point d'arrêt apparaît dans la marge de gauche, en regard du nom de l'appel de fonction.

Point d'arrêt dans la fenêtre Pile des appels

Si vous ouvrez la fenêtre Points d'arrêt (raccourci Ctrl + Alt + B), le point d'arrêt apparaît en tant que point d'arrêt dont l'emplacement en mémoire correspond à la prochaine instruction exécutable de la fonction. Le débogueur arrête l'exécution à l'instruction.

Point d'arrêt de pile des appels dans la fenêtre Points d'arrêt

Pour dessiner visuellement des points d'arrêt pendant l'exécution du code, consultez Mapper les méthodes sur la pile des appels tout en déboguant dans Visual Studio.

Retour au début Set a breakpoint at a source line, assembly instruction, or call stack function

Retour au début Contents

Définir un point d'arrêt à une instruction d'assembly dans la fenêtre Code Machine

Pour définir un point d'arrêt à une instruction assembly, le débogueur doit être en mode arrêt.

  1. Ouvrez la fenêtre Code Machine (raccourci : Ctrl + Alt + D).

  2. Effectuez l’une des opérations suivantes :

    1. Double-cliquez dans la marge de la fenêtre au niveau de la ligne où vous voulez couper.

      ou

    2. Sélectionnez la ligne et choisissez F9.

Retour au début Set a breakpoint at a source line, assembly instruction, or call stack function

Retour au début Contents

Accéder à la fonctionnalité avancée des points d'arrêt

Menu contextuel Point d'arrêt

Dans une fenêtre source, la fenêtre Pile des appels ou la fenêtre Code Machine, ouvrez le menu contextuel du point d'arrêt et choisissez la propriété.

Dans la fenêtre Points d'arrêt, sélectionnez une ligne de point d'arrêt et ouvrez le menu contextuel. Vous pouvez également définir certaines conditions directement dans la colonne des conditions.

Retour au début Contents

Spécifier si un point d'arrêt coupe par nombre d'accès, évaluation d'expression, emplacement d'exécution ou changement de données

  • Specify a hit count at which the breakpoint executes • Specify a breakpoint condition using a code expression • Specify the devices, processes, or threads that a breakpoint executes on • Set a data change breakpoint (native C++ only)

Spécifier un nombre d'accès auquel le point d'arrêt s'exécute

Le nombre d'accès garde la trace du nombre de fois où un point d'arrêt a été atteint. Vous définissez une valeur et une condition afin que le point d'arrêt s'exécute lorsque le nombre d'accès est égale à la valeur, est égal à un multiple d'une valeur spécifiée ou est supérieur ou égal à la valeur. Pour spécifier le nombre d'accès et de condition :

  1. Ouvrez la boîte de dialogue Nombre d'accès à un point d'arrêt.

    1. Dans une source, Désassemblage ou Pile des appels, sélectionnez une ligne contenant un point d'arrêt, puis choisissez Points d'arrêt, Nombre d'accès dans le menu contextuel.

      ou

    2. Dans la fenêtre Points d'arrêt, sélectionnez une ligne de point d'arrêt, puis choisissez Nombre d'accès dans le menu contextuel.

      Boîte de dialogue Nombre d'accès à un point d'arrêt

  2. Sélectionnez la condition et entrez le nombre d'accès.

Les conditions de nombre d'accès sont utiles lorsque vous souhaitez vous arrêter dans une boucle à un certain nombre d'itérations. Vous pouvez également spécifier un nombre très grand si vous souhaitez compter le nombre de fois où un point d'arrêt est atteint, mais que vous ne voulez pas arrêter l'exécution.

Le nombre d'accès spécifié est conservé uniquement pour la session de débogage. Lorsque la session de débogage prend fin, le nombre d'accès est remis à zéro.

Retour au début Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Retour au début Contents

Spécifier une condition de point d'arrêt à l'aide d'une expression de code

Une condition de point d'arrêt est une expression que le débogueur évalue lorsqu'un point d'arrêt est atteint. Si la condition est remplie, le débogueur arrête l'exécution.

La condition peut être toute expression valide reconnue par le débogueur. Dans un programme bancaire, par exemple, vous pouvez définir une condition de point d'arrêt, telle que balance < 0. Pour plus d'informations sur les expressions valides, consultez Expressions dans le débogueur.

Pour spécifier une condition de point d'arrêt

  1. Ouvrez le menu contextuel du point d'arrêt, puis choisissez Condition.

  2. Dans la boîte Condition de point d'arrêt, entrez une expression valide dans la zone Condition.

  3. Choisissez est true pour arrêter l'exécution lorsque l'expression est satisfaite ou choisissez a changé pour l'arrêter lorsque la valeur de l'expression est modifiée.

Le débogueur n'évalue pas l'expression jusqu'à ce que le point d'arrêt soit atteint pour la première fois. Si vous choisissez a changé pour du code natif, le débogueur ne considère pas la première évaluation de la condition comme étant une modification. Le point d'arrêt n'est donc pas atteint à la première évaluation. Si vous sélectionnez a changé pour du code managé, le point d'arrêt est atteint lors de la première évaluation, après la sélection de la valeur a changé.

Si vous définissez une condition de point d'arrêt dont la syntaxe est incorrecte, un message d'avertissement apparaît immédiatement. Si vous spécifiez une condition de point d'arrêt avec une syntaxe valide mais dont la sémantique n'est pas valide, un message d'avertissement apparaît lorsque le point d'arrêt est atteint pour la première fois. Dans l'un et l'autre cas, le débogueur arrête l'exécution lorsque le point d'arrêt non valide est atteint. Le point d'arrêt n'est ignoré que si la condition est valide et donne false.

Retour au début Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Retour au début Contents

Spécifier les périphériques, processus ou threads sur lesquels un point d'arrêt s'exécute

  1. Ouvrir le menu contextuel d'un point d'arrêt et choisissez Filtre.

    Boîte de dialogue Filtre de point d'arrêt

  2. Spécifier les critères de filtre en fonction des instructions de la boîte de dialogue.

Retour au début Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Retour au début Contents

Définir un point d'arrêt de modification de données (natif C++ uniquement)

Les points d'arrêt sur variable interrompent l'exécution lorsqu'une valeur stockée dans un emplacement mémoire spécifié est écrite. Si la valeur est lue mais pas écrite, l'exécution n'est pas interrompue. Pour définir des points d'arrêt sur variable, le débogueur doit être en mode arrêt.

  1. Dans le menu Déboguer, choisissez Nouveau point d'arrêt, puis Nouveau point d'arrêt sur variable.

    ou

    Dans le menu de la fenêtre Points d'arrêt, choisissez Nouveau, Nouveau point d'arrêt sur variable.

    Boîte de dialogue Nouveau point d'arrêt

  2. Dans la zone Adresse, tapez une adresse mémoire ou une expression dont l'évaluation donne une adresse mémoire.

    Par exemple, tapez &avar pour arrêter l'exécution lorsque le contenu de la variable avar change.

  3. Dans la zone Nombre d'octets, tapez le nombre d'octets que vous souhaitez voir surveillés par le débogueur.

    Par exemple, si vous tapez 4, le débogueur surveillera les quatre octets qui commencent à &myFunction et arrêtera l'exécution si l'un de ces octets change de valeur.

Pour définir des points d'arrêt sur variable, le débogueur doit être en mode arrêt.

Les points d'arrêt sur variable ne fonctionnent pas dans les conditions suivantes :

  • Si un processus qui n'est pas en cours de débogage écrit dans l'emplacement de mémoire

  • Si l'emplacement de mémoire est partagé entre deux ou plusieurs processus.

  • Si l'emplacement de mémoire est mis à jour dans le noyau. Par exemple, si la mémoire est transmise à la fonction Windows ReadFile 32 bits, elle est mise à jour à partir du mode noyau et le débogueur ne s'interrompt pas à l'écriture en mémoire.

Les adresses de variables changent d'une session de débogage à la suivante. C'est pour cette raison que les points d'arrêt sur variable sont automatiquement désactivés à la fin de chaque session de débogage.

Si vous définissez un point d'arrêt sur une variable locale, ce point reste actif lorsque la fonction s'arrête. Toutefois, l'adresse mémoire qui lui est attribuée n'a plus la même signification. Par conséquent, les résultats d'un tel point d'arrêt sont imprévisibles. Si vous définissez un point d'arrêt sur une variable locale, la meilleure pratique consiste à le supprimer ou le désactiver avant l'arrêt de la fonction.

Visual Studio prend actuellement en charge quatre points d'arrêt sur variable au maximum par solution.

Retour au début Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Retour au débutContents

Imprimer dans la fenêtre Sortie avec des points de trace

Les points de trace représentent une nouvelle façon d'utiliser les points d'arrêt. Un point de trace est un point d'arrêt qui affiche un message dans la fenêtre Sortie. Un point de trace peut agir comme une instruction de traçage temporaire dans le langage de programmation.

Pour imprimer un message sur un point d'arrêt existant, ouvrez le menu contextuel du point d'arrêt et choisissez Lorsqu'il est atteint.

Vous spécifiez le message à imprimer dans la boîte de dialogue Lorsque le point d'arrêt est atteint.

Boîte de dialogue Lorsque le point d'arrêt est atteint

Spécifier le message

Vous pouvez inclure des informations de programmation dans le message à l'aide de la syntaxe DebuggerDisplayAttribute (voir DebuggerDisplayAttribute). Voici quelques exemples :

  • In function '{$FUNC}', on thread '{$TID}'

  • Used variable: {varName}, function name: {functionName($FUNC)}

Vous pouvez utiliser l'un des mots clés qui sont décrits dans la boîte de dialogue Lorsque le point d'arrêt est atteint. De plus, vous pouvez utiliser deux autres mots clés qui ne sont pas indiqués dans la boîte de dialogue : $TICK insère le nombre de cycles UC actuel et $FILEPOS insère la position actuelle dans le fichier.

Spécifier le comportement des points de trace

Pour arrêter l'exécution lorsque le point de trace est atteint, désactivez la case à cocher Continuer l'exécution. Lorsque Continuer l'exécution est activé, l'exécution n'est pas interrompue. Dans les deux cas, le message est imprimé.

Désactiver le point de trace

Pour désactiver temporairement le point de trace, désactivez la case à cocher Afficher un message.

Retour au débutContents

Gérer les points d'arrêt dans la fenêtre Points d'arrêt

  • Export and import breakpoints • Label breakpoints

Presque toutes les fonctionnalités à définir, configurer et gérer les points d'arrêt de la fenêtre Points d'arrêt sont disponibles aux différents emplacements de point d'arrêt individuels dans les fenêtres source, la fenêtre Pile des appels et la fenêtre Code Machine. Mais la fenêtre Points d'arrêt vous donne un lieu central pour gérer tous vos points d'arrêt, qui peuvent être particulièrement utiles dans une large solution ou un scénario complexe de débogage où les points d'arrêt sont critiques. Si vous devez enregistrer ou partager l'état et l'emplacement d'un ensemble de points d'arrêt, vous pouvez enregistrer et importer des fichiers de point d'arrêt uniquement dans la fenêtre Points d'arrêt.

Retour au début Manage breakpoints in the Breakpoints window

Retour au début Contents

Étiqueter des points d'arrêt

Les étiquettes de point d'arrêt sont utilisées uniquement dans la fenêtre Points d'arrêt pour trier et filtrer la liste de points d'arrêt. Pour ajouter une étiquette à un point d'arrêt, choisissez la ligne de point d'arrêt puis choisissez Étiquette dans le menu contextuel.

Résoudre les points d'arrêt

  • The debugger can't determine the source file for a breakpoint • The debugger can't locate the correct version of the source file for a breakpoint • Breakpoints don't work in a DLL

Le débogueur ne peut pas déterminer le fichier source pour un point d'arrêt

Si plusieurs fichiers sources d'un projet portent le même nom, le débogueur risque d'avoir du mal à déterminer dans quel fichier le point d'arrêt est défini. Cela se produit souvent lorsque vous créez un module portant le même nom qu'un composant de la bibliothèque de débogage avec laquelle vous établissez la liaison.

Pour résoudre ce problème, sélectionnez le point d'arrêt dans une fenêtre source et choisissez Emplacement dans le menu contextuel.

Boîte de dialogue Point d'arrêt sur fichier

Entrez le chemin d'accès complet au fichier correct dans la zone Fichier

Retour au débutTroubleshoot breakpoints

Retour au débutContents

Le débogueur ne peut pas localiser la version correcte du fichier source pour un point d'arrêt

Si un fichier source a été modifié et que la source ne correspond plus au code que vous déboguez, le débogueur peut rechercher le fichier source correspondant à un point d'arrêt, même si le fichier source existe.

  1. Si vous souhaitez que Visual Studio affiche un code source qui ne correspond pas à la version que vous déboguez, choisissez Déboguer, Options et paramètres. Dans la page Débogage/Général, désactivez l'option N'utiliser que le code source qui correspond exactement à la version originale.

  2. Vous pouvez également lier le point d'arrêt au fichier source. Sélectionnez le point d'arrêt et choisissez Emplacement dans le menu contextuel. Activez la case à cocher Permettre que le code source soit différent de la version d'origine dans la boîte de dialogue Point d'arrêt sur fichier.

Retour au débutTroubleshoot breakpoints

Retour au débutContents

Les points d'arrêt ne fonctionnent pas dans une DLL

Vous ne pouvez pas définir un point d'arrêt dans un fichier source lorsque le débogueur n'a pas chargé les informations de débogage pour le module dans lequel le code est situé. Les symptômes peuvent comprendre un message de type impossible de définir le point d'arrêt. Le glyphe du point d'arrêt d'avertissement s'affiche à l'emplacement du point d'arrêt. Toutefois, ces points d'arrêt d'avertissement deviennent de réels points d'arrêt lorsque le code est chargé.

Retour au début Troubleshoot breakpoints

Retour au débutContents

Référence de glyphes de point d'arrêt

Les fenêtres source et la fenêtre Code machine montrent les emplacements des points d'arrêt en affichant des symboles appelés glyphes dans la marge de gauche. Le tableau suivant décrit ces glyphes.

Si vous placez le pointeur de la souris sur un glyphe de point d'arrêt, un conseil apparaît pour vous fournir davantage d'informations sur ce point d'arrêt. Ces informations sont particulièrement utiles en cas de points d'arrêt d'erreur et d'avertissement.

Glyphe

Description

Glyphe de débogage 1

Point d'arrêt normal. Le glyphe plein indique que le point d'arrêt est activé. Le glyphe creux indique qu'il est désactivé.

Glyphe de débogage 2

Point d'arrêt avancé. Actif/désactivé. Le signe + indique que le point d'arrêt possède au moins une fonctionnalité avancée, telle qu'une condition, un nombre d'accès ou un filtre.

Glyphe de débogage 3

Point d'arrêt mappé. Actif/désactivé. Le point d'arrêt est défini dans le code ASP/ASP.NET et mappé à un point d'arrêt dans la page HTML correspondante. Il peut également être défini dans un fichier de script côté serveur et mappé au fichier de script côté client correspondant.

Glyphe de débogage 4

Point de trace. Actif/désactivé. Une fois atteint, ce point provoque l'exécution d'une action spécifiée, mais n'arrête pas l'exécution du programme.

Glyphe de débogage 5

Point de trace avancé. Actif/désactivé. Le signe + indique que le point de trace possède au moins une fonctionnalité avancée, telle qu'une condition, un nombre d'accès ou un filtre.

Glyphe de débogage 6

Point de trace mappé. Actif/désactivé. Le point de trace est défini dans le code ASP/ASP.NET et mappé à un point de trace dans la page HTML correspondante.

Glyphe de débogage 7

Erreur de point d'arrêt ou de point de trace. Le X indique que le point d'arrêt ou de trace n'a pas pu être défini en raison d'une condition d'erreur.

Glyphe de débogage 8

Avertissement de point d'arrêt ou de point de trace. Le point d'exclamation indique qu'un point d'arrêt ou un point de trace n'a pas pu être défini en raison d'une condition temporaire. En général, cela signifie que le code situé à l'emplacement du point d'arrêt ou du point de trace n'a pas été chargé. Il s'affiche également si vous l'attachez à un processus et que les symboles de ce processus ne sont pas chargés. Une fois que le code ou les symboles sont chargés, le point d'arrêt est activé et le glyphe est modifié.

Retour au débutContents

Voir aussi

Concepts

Démarrer, Pas à pas principal, Exécuter du code et Arrêter le débogage dans Visual Studio