Les outils de débogage
2. Points d’arrêt et TracePoint
Inversement, si vous souhaitez ignorer l’exécution d’un bloc de code ou au contraire à nouveau exécuter un bloc de code, il est possible de déplacer le point d’exécution pour désigner la prochaine instruction exécutée. Il suffit de déplacer la flèche jaune affichée sur la marge en face de la prochaine instruction à exécuter.
Comme nous l’indique Microsoft, cette commande doit être utilisée avec précaution. Il faut notamment se souvenir des points suivants : les instructions situées entre l’ancien et le nouveau point d’exécution ne seront pas exécutées, déplacer le point d’exécution en arrière n’annule pas les instructions déjà traitées et le point d’exécution ne peut être déplacé qu’à l’intérieur d’une fonction ou procédure.
2. Points d’arrêt et TracePoint
Nous avons vu que la solution pour passer en mode arrêt était l’utilisation des touches [Ctrl] [Alt] [Pause]. Cette solution présente un gros inconvénient : l’exécution s’arrête n’importe où. Les points d’arrêt nous fournissent une solution plus élégante grâce à laquelle nous pouvons choisir l’emplacement où aura lieu l’interruption de l’exécution.
Les points d’arrêt peuvent aussi être conditionnels. Différents types de conditions sont pris en charge pour leur activation (condition, nombre de passage...).
Les TracePoint sont pratiquement identiques aux points d’arrêt mis à part que pour un TracePoint vous pouvez spécifier l’action exécutée lorsque le point est atteint. Ce peut être le passage en mode arrêt de l’application et/ou l’affichage d’un message. Les points d’arrêt ou les TracePoint sont affichés, dans l’environnement Visual Studio, par une série d’icônes. Les icônes vides représentent un élément désactivé.
représente un point d’arrêt normal, activé ou désactivé.
représente un point d’arrêt avancé (condition, nombre de passage ou filtre).
représente un TracePoint normal, activé ou désactivé.
représente un TracePoint avancé (condition, nombre de passage ou filtre).
représente un point d’arrêt ou un TracePoint en erreur.
représente un avertissement sur un point d’arrêt ou un TracePoint.
a. Placer un point d’arrêt
Pour placer un point d’arrêt, de nombreuses possibilités sont disponibles :
● effectuer un clic sur la marge de la fenêtre de code,
● positionner le curseur sur la ligne correspondante et utiliser le raccourciclavier [Ctrl] B,
● utiliser l’option Point d’arrêt Insérer un point d’arrêt du menu contextuel de la fenêtre de code.
Toutes ces techniques insèrent le point d’arrêt et matérialisent son emplacement par un point rouge dans la marge et le surlignement en rouge de la ligne correspondante.
Pour toutes ces solutions, le code doit être visible dans l’éditeur. L’option Interrompre à la fonction du menu Déboguer Nouveau point d’arrêt permet de placer un point d’arrêt sur une procédure ou fonction en saisissant simplement son nom.
Attention, la boîte de dialogue vous propose de préciser sur quelle ligne de la fonction vous souhaitez placer un point d’arrêt mais cette fonctionnalité n’est pas disponible pour les points d’arrêt sur des fonctions.
Les points d’arrêt ainsi placés sont inconditionnels. Dès que l’exécution arrive sur cette ligne, l’application passe en mode arrêt. On peut perfectionner le fonctionnement des points d’arrêt en y ajoutant des conditions, un nombre de passage ou en le transformant en TracePoint. Il convient pour cela de modifier les propriétés du point d’arrêt par le menu contextuel disponible par un clic droit sur la ligne concernée par le point d’arrêt.
Le passage en mode arrêt peut être soumis à condition. La boîte de dialogue suivante permet de préciser les conditions d’exécution du point d’arrêt.
Nous devons saisir, dans cette boîte de dialogue, une expression qui sera évaluée à chaque passage sur le point d’arrêt. L’exécution s’arrêtera alors :
● si le résultat de l’évaluation de la condition est vraie,
● si le résultat de l’évaluation de la condition a été modifié depuis le dernier passage sur ce point d’arrêt. À noter que, dans ce cas, au moins deux passages sont nécessaires pour provoquer l’arrêt de l’application (le premier servant simplement à mémoriser le résultat de l’expression).
Les points d’arrêt sont également capables de compter le nombre de fois où ils sont atteints et de s’exécuter pour un nombre particulier de passages.
Cette boîte de dialogue nous permet de définir le nombre de passages sur le point d’arrêt pour que celuici arrête effectivement l’application. Quatre options sont disponibles pour la condition d’arrêt sur le nombre de passages.
Ajout d’une condition
Modification du nombre de passages
Attention, si une condition est indiquée pour le point d’arrêt, le nombre de passage correspond au nombre de fois où l’exécution de l’application est passée sur cette ligne avec la condition vérifiée. Avec la configuration de notre exemple, nous nous arrêterons dans la boucle au 100000ième passage (la condition sera vraie pour i=0,100,200,300, 400,500,600,700,800,900).
Les filtres permettent d’ajouter des critères supplémentaires pour l’exécution d’un point d’arrêt. Ces critères portent sur le nom de la machine où s’exécute l’application, ainsi que le processus ou le thread.
La condition doit être exprimée avec les mots clés MachineName, ProcessId, ProcessName, ThreadId, ThreadName et les opérateurs & (et), || (ou),! (not).
Un point d’arrêt peut être transformé en TracePoint en précisant une action particulière à exécuter lorsqu’il sera atteint.
Filtrage
Transformation en TracePoint
Cette boîte de dialogue attend le libellé du message affiché dans la fenêtre de sortie lorsque le point d’arrêt est atteint. Elle autorise également l’exécution d’une macro. Pour que le point d’arrêt soit vraiment transformé en TracePoint, l’option Continuer l’exécution doit être activée.
b. Activer, désactiver, supprimer un point d’arrêt
Les points d’arrêt peuvent également être momentanément désactivés en utilisant le menu contextuel.
Le point d’arrêt peut ensuite être à nouveau activé en utilisant à nouveau le menu contextuel. Ce même menu permet aussi la suppression d’un point d’arrêt, mais il est plus rapide d’effectuer un double clic sur le point d’arrêt lui
même. Le menu Déboguer propose également l’option Supprimer tous les points d’arrêt, évitant d’avoir à parcourir de nombreuses lignes de code pour éliminer l’ensemble des points d’arrêt.
Pour nous faciliter la tâche lors du débogage d’une application, une fenêtre nous propose un récapitulatif de tous les points d’arrêt placés dans votre projet. Cette fenêtre est accessible par l’intermédiaire du menu Déboguer Fenêtres Points d’arrêt. Cette fenêtre propose un menu contextuel permettant de réaliser les principales actions sur un point d’arrêt.
Contrairement à des versions plus anciennes de Visual Basic (version 6.0), les points d’arrêt sont conservés lorsque vous fermez votre projet.