Utiliser des points d’arrêt dans le débogueur Visual Studio
- 06/30/2020
- 12 minutes à lire
-
- M
- g
- j
- v
- g
-
+8
Les points d’arrêt sont l’une des techniques de débogage les plus importantes de la boîte à outils de votre développeur. Vous définissez des points d’arrêt où vous souhaitez interrompre l’exécution du débogueur. Par exemple, vous voudrez peut-être voir l’état des variables de code ou regarder la pile d’appels à un certain point d’arrêt. Si vous essayez de résoudre un avertissement ou un problème lors de l’utilisation de points d’arrêt, consultez Dépannage des points d’arrêt dans le débogueur Visual Studio.
Remarque
Si vous connaissez la tâche ou le problème que vous essayez de résoudre, mais que vous devez savoir quel type de point d’arrêt utiliser, consultez FAQ – Trouvez votre fonction de débogage.
- Définir des points d’arrêt dans le code source
- Actions de point d’arrêt et points de trace
- Conditions de point d’arrêt
- Créer une expression conditionnelle
- Utilisez des ID d’objet dans des expressions conditionnelles (C # et F # uniquement)
- Définissez une condition de nombre de clics
- Définir une condition de filtre
- Définir des points d’arrêt de fonction
- Définir un point d’arrêt de fonction à l’aide d’une adresse mémoire (C++ natif uniquement)
- Définir des points d’arrêt de données (.NET Core 3.0 ou supérieur)
- Définir des points d’arrêt de données (C++ natif uniquement)
- Gérer les points d’arrêt dans la fenêtre Points d’arrêt
- Étiquettes de points d’arrêt
- Exporter et importer des points d’arrêt
- Définir des points d’arrêt à partir des fenêtres du débogueur
- Définissez un point d’arrêt dans la fenêtre de la pile d’appels
- Définir un point d’arrêt dans la fenêtre de démontage
- Voir aussi
Définir des points d’arrêt dans le code source
Vous pouvez définir un point d’arrêt sur n’importe quelle ligne de code exécutable. Par exemple, dans le code C# suivant, vous pouvez définir un point d’arrêt sur la ligne de code avec l’affectation de variable (int testInt = 1
), la boucle for
ou tout code à l’intérieur de la boucle for
. Vous ne pouvez pas définir de point d’arrêt sur les signatures de méthode, les déclarations pour un espace de noms ou une classe, ou les déclarations de variables s’il n’y a pas d’affectation et pas de getter/setter.
Pour définir un point d’arrêt dans le code source, cliquez dans la marge extrême gauche à côté d’une ligne de code. Vous pouvez également sélectionner la ligne et appuyer sur F9, sélectionner Déboguer > Basculer le point d’arrêt, ou cliquer avec le bouton 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 de gauche.
Pour la plupart des langages, y compris C#, les lignes de point d’arrêt et d’exécution en cours sont automatiquement mises en surbrillance. Pour le code C++, vous pouvez activer la surbrillance des lignes de point d’arrêt et actuelles en sélectionnant Outils (ou Débogage) > Options > Débogage > Mettez en surbrillance toute la ligne source pour les points d’arrêt et l’instruction courante (C++ uniquement).
Lorsque vous déboguez, l’exécution s’arrête au point d’arrêt, avant que le code de cette ligne ne soit exécuté. Le symbole du point d’arrêt montre une flèche jaune.
Au point d’arrêt dans l’exemple suivant, la valeur de testInt
est toujours 1. Ainsi, la valeur n’a pas changé depuis l’initialisation de la variable (définie sur une valeur de 1) car l’instruction en jaune n’a pas encore été exécutée.
Lorsque le débogueur s’arrête au point d’arrêt, vous pouvez consulter l’état actuel de l’application, y compris les valeurs de variables et la pile d’appels.
Voici quelques instructions générales pour travailler avec des points d’arrêt.
-
Le point d’arrêt est une bascule. Vous pouvez cliquer dessus, appuyer sur F9 ou utiliser le point d’arrêt Debug > pour le supprimer ou le réinsérer.
-
Pour désactiver un point d’arrêt sans le supprimer, survolez-le ou cliquez dessus avec le bouton droit de la souris, puis sélectionnez Désactiver le point d’arrêt. Les points d’arrêt désactivés apparaissent sous forme de points vides dans la marge de gauche ou dans la fenêtre Points d’arrêt. Pour réactiver un point d’arrêt, survolez-le ou cliquez dessus avec le bouton droit de la souris, puis sélectionnez Activer le point d’arrêt.
-
Définissez des conditions et des actions, ajoutez et modifiez des étiquettes ou exportez un point d’arrêt en cliquant dessus avec le bouton droit de la souris et en sélectionnant la commande appropriée, ou en passant le curseur dessus et en sélectionnant l’icône Paramètres.
Actions de point d’arrêt et points de trace
Un point de trace est un point d’arrêt qui imprime un message dans la fenêtre de sortie. Un point de trace peut agir comme une instruction de trace temporaire dans le langage de programmation et n’interrompt pas l’exécution du code. Vous créez un point de trace en définissant une action spéciale dans la fenêtre Paramètres du point d’arrêt. Pour des instructions détaillées, consultez Utiliser les points de trace dans le débogueur Visual Studio.
Conditions de point d’arrêt
Vous pouvez contrôler quand et où un point d’arrêt s’exécute en définissant des conditions. La condition peut être n’importe quelle expression valide que le débogueur reconnaît. Pour plus d’informations sur les expressions valides, consultez Expressions dans le débogueur.
Pour définir une condition de point d’arrêt:
-
Cliquez avec le bouton droit sur le symbole du point d’arrêt et sélectionnez Conditions (ou appuyez sur Alt + F9, C). Ou survolez le symbole du point d’arrêt, sélectionnez l’icône Paramètres, puis sélectionnez Conditions dans la fenêtre Paramètres du point d’arrêt.
Vous pouvez également définir des conditions dans la fenêtre Points d’arrêt en cliquant avec le bouton droit sur un point d’arrêt et en sélectionnant Paramètres, puis en sélectionnant Conditions.
-
Dans la liste déroulante, sélectionnez Expression conditionnelle, Nombre d’accès ou Filtre, puis définissez la valeur en conséquence.
-
Sélectionnez Fermer ou appuyez sur Ctrl + Entrée pour fermer la fenêtre Paramètres du point d’arrêt. Ou, dans la fenêtre Points d’arrêt, sélectionnez OK pour fermer la boîte de dialogue.
Les points d’arrêt avec des conditions définies apparaissent avec un symbole + dans les fenêtres code source et Points d’arrêt.
Créer une expression conditionnelle
Lorsque vous sélectionnez une expression conditionnelle, vous pouvez choisir entre deux conditions : Est vraie ou Lorsqu’elle est modifiée. Choisir est vrai pour casser lorsque l’expression est satisfaite, ou Lorsqu’il est changé pour casser lorsque la valeur de l’expression a changé.
Dans l’exemple suivant, le point d’arrêt n’est atteint que lorsque la valeur de testInt
est 4:
Dans l’exemple suivant, le point d’arrêt est atteint uniquement lorsque la valeur de testInt
change:
Si vous définissez une condition de point d’arrêt avec une syntaxe non valide, un message d’avertissement apparaît. Si vous spécifiez une condition de point d’arrêt avec une syntaxe valide mais une sémantique non valide, un message d’avertissement apparaît la première fois que le point d’arrêt est atteint. Dans les deux cas, le débogueur se casse lorsqu’il atteint le point d’arrêt invalide. Le point d’arrêt n’est ignoré que si la condition est valide et vaut false
.
Note
Pour le champ When changed, le débogueur ne considère pas la première évaluation de la condition comme une modification, il n’atteint donc pas le point d’arrêt lors de la première évaluation.
Utilisez des ID d’objet dans des expressions conditionnelles (C # et F # uniquement)
Il y a des moments où vous souhaitez observer le comportement d’un objet spécifique. Par exemple, vous voudrez peut-être savoir pourquoi un objet a été inséré plus d’une fois dans une collection. En C# et F#, vous pouvez créer des ID d’objet pour des instances spécifiques de types de référence et les utiliser dans des conditions de point d’arrêt. L’ID d’objet est généré par les services de débogage common language runtime (CLR) et associé à l’objet.
Pour créer un ID d’objet:
-
Définissez un point d’arrêt dans le code à un endroit après la création de l’objet.
-
Démarrez le débogage et lorsque l’exécution s’arrête au point d’arrêt, sélectionnez Déboguer > Windows > Locaux (ou appuyez sur Ctrl + Alt + V, L) pour ouvrir la fenêtre Locaux.
Recherchez l’instance d’objet spécifique dans la fenêtre Locaux, cliquez dessus avec le bouton droit de la souris et sélectionnez Créer un ID d’objet.
Vous devriez voir un number plus un nombre dans la fenêtre des sections locales. C’est l’ID de l’objet.
-
Ajoutez un nouveau point d’arrêt au point que vous souhaitez étudier ; par exemple, lorsque l’objet doit être ajouté à la collection. Cliquez avec le bouton droit sur le point d’arrêt et sélectionnez Conditions.
-
Utilisez l’ID d’objet dans le champ Expression conditionnelle. Par exemple, si la variable
item
est l’objet à ajouter à la collection, select vaut true et tapez item == item< n >, où < n > est le numéro d’identification de l’objet.L’exécution se brisera au moment où cet objet doit être ajouté à la collection.
Pour supprimer l’ID de l’objet, cliquez avec le bouton droit sur la variable dans la fenêtre Locaux et sélectionnez Supprimer l’ID de l’objet.
Remarque
Les ID d’objet créent des références faibles et n’empêchent pas l’objet d’être récupéré. Ils ne sont valables que pour la session de débogage en cours.
Définissez une condition de nombre de clics
Si vous pensez qu’une boucle de votre code commence à se comporter mal 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 ce nombre de clics, plutôt que d’avoir à appuyer plusieurs fois sur F5 pour atteindre cette itération.
Sous Conditions dans la fenêtre Paramètres du point d’arrêt, sélectionnez Nombre de clics, puis spécifiez le nombre d’itérations. Dans l’exemple suivant, le point d’arrêt est défini pour frapper toutes les autres itérations:
Définir une condition de filtre
Vous pouvez limiter un point d’arrêt au déclenchement uniquement sur des périphériques spécifiés, ou dans des processus et des threads spécifiés.
Sous Conditions dans la fenêtre Paramètres de point d’arrêt, sélectionnez Filtrer, puis entrez une ou plusieurs des expressions suivantes:
- MachineName=”nom”
- ProcessId=valeur
- ProcessName=”nom”
- ThreadId= valeur
- ThreadName=”nom”
Placez les valeurs de chaîne entre guillemets doubles. Vous pouvez combiner des clauses en utilisant &
(ET), ||
(OU), !
(NON) et des parenthèses.
Définir des points d’arrêt de fonction
Vous pouvez interrompre l’exécution lorsqu’une fonction est appelée. Ceci est utile, par exemple, lorsque vous connaissez le nom de la fonction mais pas son emplacement. C’est également utile si vous avez des fonctions avec le même nom et que vous souhaitez toutes les casser (comme des fonctions surchargées ou des fonctions dans différents projets).
Pour définir un point d’arrêt de fonction:
-
Sélectionnez Déboguer > Nouveau Point d’arrêt > Point d’arrêt de la fonction, ou appuyez sur Ctrl + K, B.
Vous pouvez également sélectionner Un nouveau Point d’arrêt de fonction > dans la fenêtre Points d’arrêt.
-
Dans la boîte de dialogue Nouveau Point d’arrêt de fonction, entrez le nom de la fonction dans la zone Nom de la fonction.
Pour affiner la spécification de la fonction:
-
Utilisez le nom complet de la fonction.
Exemple:
Namespace1.ClassX.MethodA()
-
Ajoutez les types de paramètres d’une fonction surchargée.
Exemple:
MethodA(int, string)
-
Utilisez le ‘!’ symbole pour spécifier le module.
Exemple:
App1.dll!MethodA
-
Utilisez l’opérateur de contexte en C++ natif.
{function, , }
Exemple:
{MethodA, , App1.dll}+2
-
-
Dans la liste déroulante Langue, choisissez la langue de la fonction.
-
Sélectionnez OK.
Définir un point d’arrêt de fonction à l’aide d’une adresse mémoire (C++ natif uniquement)
Vous pouvez utiliser l’adresse d’un objet pour définir un point d’arrêt de fonction sur une méthode appelée par une instance spécifique d’une classe. Par exemple, étant donné un objet adressable de type my_class
, vous pouvez définir un point d’arrêt de fonction sur la méthode my_method
que l’instance appelle.
-
Définissez un point d’arrêt quelque part après l’instanciation de l’instance de la classe.
-
Recherchez l’adresse de l’instance (par exemple,
0xcccccccc
). -
Sélectionnez Déboguer > Nouveau Point d’arrêt > Point d’arrêt de la fonction, ou appuyez sur Ctrl + K, B.
-
Ajoutez ce qui suit à la zone Nom de la fonction et sélectionnez Langage C++.
((my_class *) 0xcccccccc)->my_method
Définir des points d’arrêt de données (.NET Core 3.0 ou supérieur)
Les points d’arrêt de données interrompent l’exécution lorsque la propriété d’un objet spécifique change.
Pour définir un point d’arrêt de données
-
Dans un projet .NET Core, démarrez le débogage et attendez qu’un point d’arrêt soit atteint.
-
Dans la fenêtre Autos, Watch ou Locals, cliquez avec le bouton droit sur une propriété et sélectionnez Pause lorsque la valeur change dans le menu contextuel.
Les points d’arrêt de données dans .NET Core ne fonctionneront pas pour:
- Propriétés qui ne sont pas extensibles dans l’info-bulle, les sections locales, les Autos ou la fenêtre Watch
- Variables statiques
- Classes avec l’attribut DebuggerTypeProxy
- Champs à l’intérieur des structures
Définir des points d’arrêt de données (C++ natif uniquement)
Les points d’arrêt de données interrompent l’exécution lorsqu’une valeur stockée à une adresse mémoire spécifiée change. Si la valeur est lue mais non modifiée, l’exécution ne se casse pas.
Pour définir un point d’arrêt de données:
-
Dans un projet C++, démarrez le débogage et attendez qu’un point d’arrêt soit atteint. Dans le menu Débogage, choisissez Nouveau Point d’arrêt > Point d’arrêt des données.
Vous pouvez également sélectionner Un nouveau Point d’arrêt de données > dans la fenêtre Points d’arrêt ou cliquer avec le bouton droit sur un élément dans la fenêtre Autos, Watch ou Locals et sélectionner Pause lorsque la valeur change dans le menu contextuel.
-
Dans la zone Adresse, tapez une adresse mémoire ou une expression qui évalue une adresse mémoire. Par exemple, tapez
&avar
pour casser lorsque le contenu de la variableavar
change. -
Dans la liste déroulante Nombre d’octets, sélectionnez le nombre d’octets que le débogueur doit surveiller. Par exemple, si vous sélectionnez 4, le débogueur surveillera les quatre octets commençant à
&avar
et s’arrêtera si l’un de ces octets change de valeur.
Les points d’arrêt de données ne fonctionnent pas dans les conditions suivantes:
- Un processus qui n’est pas débogué écrit dans l’emplacement de la mémoire.
- L’emplacement mémoire est partagé entre deux processus ou plus.
- L’emplacement mémoire est mis à jour dans le noyau. Par exemple, si la mémoire est transmise à la fonction Windows
ReadFile
32 bits, la mémoire sera mise à jour à partir du mode noyau, de sorte que le débogueur ne se cassera pas lors de la mise à jour. - Où l’expression watch est supérieure à 4 octets sur le matériel 32 bits et à 8 octets sur le matériel 64 bits. C’est une limitation de l’architecture x86.
Note
-
Les points d’arrêt des données dépendent d’adresses mémoire spécifiques. L’adresse d’une variable change d’une session de débogage à la suivante, de sorte que les points d’arrêt des données sont automatiquement désactivés à la fin de chaque session de débogage.
-
Si vous définissez un point d’arrêt de données sur une variable locale, le point d’arrêt reste activé à la fin de la fonction, mais l’adresse mémoire n’est plus applicable, de sorte que le comportement du point d’arrêt est imprévisible. Si vous définissez un point d’arrêt de données sur une variable locale, vous devez supprimer ou désactiver le point d’arrêt avant la fin de la fonction.
Gérer les points d’arrêt dans la fenêtre Points d’arrêt
Vous pouvez utiliser la fenêtre Points d’arrêt pour voir et gérer tous les points d’arrêt de votre solution. Cet emplacement centralisé est particulièrement utile dans une solution de grande taille ou pour des scénarios de débogage complexes où les points d’arrêt sont critiques.
Dans la fenêtre Points d’arrêt, vous pouvez rechercher, trier, filtrer, activer/désactiver ou supprimer des points d’arrêt. Vous pouvez également définir des conditions et des actions, ou ajouter une nouvelle fonction ou un nouveau point d’arrêt de données.
Pour ouvrir la fenêtre Points d’arrêt, sélectionnez Déboguer > Fenêtres > Points d’arrêt, ou appuyez sur Ctrl +Alt +B.
Pour sélectionner les colonnes à afficher dans la fenêtre Points d’arrêt, sélectionnez Afficher les colonnes. Sélectionnez un en-tête de colonne pour trier la liste des points d’arrêt par cette colonne.
Étiquettes de points d’arrêt
Vous pouvez utiliser des étiquettes pour trier et filtrer la liste des points d’arrêt dans la fenêtre Points d’arrêt.
- Pour ajouter une étiquette à un point d’arrêt, cliquez avec le bouton droit sur le point d’arrêt dans le code source ou la fenêtre Points d’arrêt, puis sélectionnez Modifier les étiquettes. Ajoutez une nouvelle étiquette ou choisissez une étiquette existante, puis sélectionnez OK.
- Triez la liste des points d’arrêt dans la fenêtre Points d’arrêt en sélectionnant les étiquettes, Conditions ou autres en-têtes de colonne. Vous pouvez sélectionner les colonnes à afficher en sélectionnant Afficher les colonnes dans la barre d’outils.
Exporter et importer des points d’arrêt
Pour enregistrer ou partager l’état et l’emplacement de vos points d’arrêt, vous pouvez les exporter ou les importer.
- Pour exporter un point d’arrêt unique vers un fichier XML, cliquez avec le bouton droit sur le point d’arrêt dans la fenêtre Code source ou Points d’arrêt, puis sélectionnez Exporter ou Exporter sélectionné. Sélectionnez un emplacement d’exportation, puis sélectionnez Enregistrer. L’emplacement par défaut est le dossier de solution.
- Pour exporter plusieurs points d’arrêt, dans la fenêtre Points d’arrêt, sélectionnez les cases à côté des points d’arrêt ou entrez des critères de recherche dans le champ de recherche. Sélectionnez l’icône Exporter tous les points d’arrêt correspondant aux critères de recherche actuels et enregistrez le fichier.
- Pour exporter tous les points d’arrêt, désélectionnez toutes les cases et laissez le champ de recherche vide. Sélectionnez l’icône Exporter tous les points d’arrêt correspondant aux critères de recherche actuels et enregistrez le fichier.
- Pour importer des points d’arrêt, dans la fenêtre Points d’arrêt, sélectionnez l’icône Importer des points d’arrêt à partir d’un fichier, accédez à l’emplacement du fichier XML et sélectionnez Ouvrir.
Définir des points d’arrêt à partir des fenêtres du débogueur
Vous pouvez également définir des points d’arrêt à partir des fenêtres de la pile d’appels et du débogueur de désassemblage.
Définissez un point d’arrêt dans la fenêtre de la pile d’appels
Pour casser à l’instruction ou à la ligne à laquelle revient une fonction appelante, vous pouvez définir un point d’arrêt dans la fenêtre de la pile d’appels.
Pour définir un point d’arrêt dans la fenêtre de la pile d’appels:
-
Pour ouvrir la fenêtre de la pile d’appels, vous devez être mis en pause pendant le débogage. Sélectionnez Déboguer > Pile d’appels Windows > ou appuyez sur Ctrl + Alt + C.
-
Dans la fenêtre Pile d’appels, cliquez avec le bouton droit sur la fonction appelante et sélectionnez Point d’arrêt > Insérer un point d’arrêt ou appuyez sur F9.
Un symbole de point d’arrêt apparaît à côté du nom de l’appel de la fonction dans la marge gauche de la pile d’appels.
Le point d’arrêt de la pile d’appels apparaît dans la fenêtre Points d’arrêt sous forme d’adresse, avec un emplacement de mémoire qui correspond à l’instruction exécutable suivante dans la fonction.
Le débogueur se casse à l’instruction.
Pour plus d’informations sur la pile d’appels, voir Comment : Utiliser la fenêtre Pile d’appels.
Pour tracer visuellement les points d’arrêt pendant l’exécution du code, consultez Méthodes de mappage sur la pile d’appels pendant le débogage.
Définir un point d’arrêt dans la fenêtre de démontage
-
Pour ouvrir la fenêtre de démontage, vous devez être mis en pause pendant le débogage. Sélectionnez Debug > Windows > Désassemblage, ou appuyez sur Ctrl+Alt+D.
-
Dans la fenêtre Désassemblage, cliquez dans la marge gauche de l’instruction à laquelle vous souhaitez casser. Vous pouvez également le sélectionner et appuyer sur F9, ou faire un clic droit et sélectionner Point d’arrêt > Insérer un point d’arrêt.
Voir aussi
- Qu’est-ce que le débogage ?
- Écrivez un meilleur code C# à l’aide de Visual Studio
- Examinez d’abord le débogage
- Dépannez les points d’arrêt dans le débogueur Visual Studio