Partager via


Concepts de base du débogage : points d'arrêt

Cette rubrique s'applique à :

Édition

Visual Basic

C#

F#

C++

Web Developer

Express

La rubrique s'applique

La rubrique s'applique

La rubrique s'applique La rubrique s'applique La rubrique s'applique

Pro, Premium et Ultimate

La rubrique s'applique

La rubrique s'applique

La rubrique s'applique

La rubrique s'applique La rubrique s'applique

Un point d'arrêt est un signal qui indique au débogueur de suspendre temporairement l'exécution de votre programme à un certain point. Lorsque l'exécution est suspendue au niveau d'un point d'arrêt, votre programme est dit en mode arrêt. Le passage en mode arrêt ne termine pas l'exécution de votre programme, qui peut reprendre à tout moment.

Le mode arrêt peut être comparé à un temps mort. Tous les éléments (fonctions, variables et objets, par exemple) restent en mémoire, mais leurs mouvements et leurs activités sont suspendus. En mode arrêt, vous pouvez examiner leurs positions et états à la recherche de violations ou de bogues. Vous pouvez également ajuster le programme, par exemple, modifier la valeur d'une variable. déplacer le point d'exécution, ce qui modifie l'instruction suivante qui sera exécutée dès la reprise de l'exécution. En C++, C# et Visual Basic, vous pouvez même apporter des modifications au code lui-même, en mode arrêt, grâce à une fonctionnalité puissante appelée Modifier & Continuer.

Les points d'arrêt sont des outils puissants qui permettent de suspendre l'exécution là où vous le souhaitez et quand vous le souhaitez. Plutôt que d'exécuter votre code ligne par ligne ou instruction par instruction, vous pouvez laisser votre programme continuer à s'exécuter jusqu'à ce qu'il atteigne un point d'arrêt, puis seulement démarrer le débogage. Le processus de débogage est ainsi beaucoup plus rapide. Sans les points d'arrêts, il serait pratiquement impossible de déboguer un programme volumineux.

De nombreux langages de programmation prévoient des instructions et des constructions qui suspendent l'exécution et placent votre programme en mode arrêt. Par exemple, Visual Basic contient l'instruction Stop. Les points d'arrêt diffèrent de ces instructions dans le sens où ils ne sont pas du code source réel qui doit être ajouté à votre programme. Aucune instruction de point d'arrêt n'est tapée dans une fenêtre source. Vous demandez un point d'arrêt par le biais de l'interface du débogueur et le débogueur le définit pour vous. Pour insérer un point d'arrêt de ligne, cliquez dans la marge grise en regard de la ligne sur laquelle vous souhaitez définir le point d'arrêt. Des points d'arrêt plus complexes peuvent être gérés par le biais de la fenêtre Points d'arrêt.

Les points d'arrêt présentent de nombreux avantages par rapport aux constructions de débogage, tels que l'instruction Stop de Visual Basic. Ils peuvent être supprimés ou modifiés sans avoir à modifier le code source de votre programme. Étant donné que les points d'arrêt ne sont pas des instructions, jamais ils ne créent de code supplémentaire lorsque vous générez une version Release de votre programme. Si vous utilisez des instructions Stop dans votre programme, vous devez supprimer manuellement ces instructions Stop avant de générer la version Release, ou vous devez utiliser des instructions conditionnelles, comme indiqué ci-dessous :

#If DEBUG Then
    Stop
#End If

Si vous souhaitez désactiver temporairement une instruction Stop, vous devez la rechercher dans votre code source et la transformer en commentaire :

 ' Stop

Si votre code source ne contient qu'une instruction Stop, cela ne pose pas de problème. En revanche, si vous déboguez un programme volumineux contenant de nombreuses instructions Stop, la recherche de toutes les instructions et leur transformation en commentaire peut prendre beaucoup de temps. Grâce aux points d'arrêt, vous pouvez sélectionner et activer ou désactiver vos points d'arrêt dans la fenêtre Points d'arrêt.

Enfin, les points d'arrêt présentent un énorme avantage sur les instructions Stop, en raison de leur souplesse. Une instruction Stop arrête l'exécution sur la ligne source où elle est placée. Vous pouvez placer un point d'arrêt sur une ligne source avec le même effet. Vous pouvez également définir un point d'arrêt sur une fonction ou une adresse mémoire, ce qui n'est pas possible avec les instructions Stop. Outre ces points d'arrêt d'emplacement, le débogueur Visual Studio propose des points d'arrêt sur variable (pour le code natif uniquement). Un point d'arrêt sur variable est défini sur une variable globale ou locale, et non sur un emplacement dans le code. Un point d'arrêt sur variable interrompt l'exécution lorsque la variable change de valeur.

Le débogueur Visual Studio permet de définir des propriétés qui modifient le comportement d'un point d'arrêt, pour encore plus de souplesse :

  • Nombre d'accès permet de déterminer combien de fois le point d'arrêt doit être atteint avant que le débogueur interrompe l'exécution. Par défaut, le débogueur interrompt l'exécution chaque fois que le point d'arrêt est atteint. Vous pouvez définir un nombre d'accès indiquant au débogueur d'interrompre le programme lorsque le point d'arrêt a été atteint deux fois, 10 fois, 512 fois ou autant de fois que vous le souhaitez. Cette propriété peut être utile car certains bogues n'apparaissent pas la première fois que votre programme exécute une loupe, appelle une fonction ou accède à une variable. Un bogue peut parfois ne pas apparaître avant la centième ou la millième itération. Pour déboguer ce genre de problème, vous pouvez définir un point d'arrêt avec un nombre d'accès de 100 ou de 1 000.

  • Condition est une expression qui détermine si le point d'arrêt est atteint ou ignoré. Lorsque le débogueur arrive au point d'arrêt, il évalue une condition. Le point d'arrêt n'est atteint que si la condition est satisfaite. Vous pouvez utiliser une condition avec un point d'arrêt d'emplacement de manière à arrêter l'exécution à un emplacement spécifié uniquement lorsqu'une certaine condition est vraie. Supposons que vous déboguiez un programme bancaire dans lequel le solde du compte n'est jamais autorisé à descendre au-dessous de zéro. Vous pouvez définir des points d'arrêt à certains emplacements du code et attacher à chacun une condition de type balance < 0. Lorsque vous exécutez le programme, l'exécution s'interrompra à ces emplacements uniquement si le solde est inférieur à zéro. Vous pouvez examiner les variables et l'état du programme à l'emplacement du premier point d'arrêt, puis poursuivre l'exécution jusqu'à l'emplacement du deuxième point d'arrêt, etc.

  • Action spécifie ce qui doit se produire lorsque le point d'arrêt est atteint. Par défaut, le débogueur arrête l'exécution, mais vous pouvez choisir d'imprimer un message ou d'exécuter à la place une macro Visual Studio. Si vous choisissez l'impression d'un message au lieu d'un arrêt, le point d'arrêt a un effet très semblable à une instruction Trace. Cette méthode d'utilisation de points d'arrêt est appelée points de trace.

  • Filtre offre un moyen de spécifier un processus ou un thread pour le point d'arrêt.

    Notes

    Une technique particulièrement utile consiste à définir des points d'arrêt dans la fenêtre Pile des appels. Cette fenêtre permet de définir un point d'arrêt sur un appel de fonction spécifique. Cela peut être utile si vous déboguez une fonction récursive (une fonction qui s'appelle elle-même). Si vous interrompez l'exécution après un certain nombre d'appels, vous pouvez utiliser la fenêtre Pile des appels pour définir un point d'arrêt sur un appel précédent qui n'est pas encore retourné. Le débogueur rencontrera ce point d'arrêt et interrompra l'exécution en sortant des appels en cours.

Voir aussi

Tâches

Comment : utiliser la fenêtre Points d'arrêt

Concepts

Breakpoints and Tracepoints

Breakpoints and Tracepoints

Autres ressources

Présentation du débogueur