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.
Contents
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.
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.
Set a breakpoint at a source line, assembly instruction, or call stack function
Contents
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.
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.
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.
Set a breakpoint at a source line, assembly instruction, or call stack function
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.
Ouvrez la fenêtre Code Machine (raccourci : Ctrl + Alt + D).
Effectuez l’une des opérations suivantes :
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.
Set a breakpoint at a source line, assembly instruction, or call stack function
Contents
Accéder à la fonctionnalité avancée des points 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. |
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 :
Ouvrez la boîte de dialogue Nombre d'accès à un point d'arrêt.
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
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.
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.
Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change
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
Ouvrez le menu contextuel du point d'arrêt, puis choisissez Condition.
Dans la boîte Condition de point d'arrêt, entrez une expression valide dans la zone Condition.
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.
Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change
Contents
Spécifier les périphériques, processus ou threads sur lesquels un point d'arrêt s'exécute
Ouvrir le menu contextuel d'un point d'arrêt et choisissez Filtre.
Spécifier les critères de filtre en fonction des instructions de la boîte de dialogue.
Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change
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.
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.
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.
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.
Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change
Contents
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.
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.
Contents
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.
Manage breakpoints in the Breakpoints window
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.
Entrez le chemin d'accès complet au fichier correct dans la zone Fichier
Troubleshoot breakpoints
Contents
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.
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.
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.
Troubleshoot breakpoints
Contents
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é.
Troubleshoot breakpoints
Contents
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 |
---|---|
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é. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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é. |
Contents
Voir aussi
Concepts
Démarrer, Pas à pas principal, Exécuter du code et Arrêter le débogage dans Visual Studio