Tout le monde connaît les points d’arrêt dans Visual Studio, qui permettent de faciliter le débogage. Depuis toujours, ces points d’arrêt comportent des fonctionnalités avancées, parfois assez méconnues.
Petit rappel des fonctionnalités présentes sous Visual Studio 2013 :
Pour placer un point d’arrêt, il suffit de cliquer dans la marge gauche de la ligne de code, ou de cliquer sur F9. En faisant un clic droit sur ce point d’arrêt, on a accès aux propriétés avancées :
1) Emplacement
Cette option permet de spécifier / vérifier l’emplacement du point d’arrêt.
Cela permet dans certains cas de résoudre des « conflits » entre plusieurs points d’arrêt.
2) Condition :
Il s’agit de définir une expression, qui sera évaluée à chaque passage sur le point d’arrêt.
Dès que la condition est remplie (c’est-à-dire que l’expression évaluée retourne « True »), le débogueur arrête l'exécution.
Exemple : au sein d’une boucle, s’arrêter quand la variable « numId » vaut « ID5 » :
Il est également possible de déclencher le point d’arrêt sur simple changement de la valeur d’une variable :
3) Nombre d'accès
Cela permet de déclencher l’arrêt du débogage en fonction du nombre de passages sur le point d’arrêt.
Ceci peut être très utile lorsqu’on se trouve dans une boucle et que l’on sait que la valeur à tester se trouve « vers la fin », ou au contraire lorsqu’on veut tester le premier tour de boucle uniquement, sans avoir à supprimer notre point d’arrêt pour les tours de boucle suivants.
Les valeurs possibles sont les suivantes :
Remarque : par défaut, cette propriété est positionnée à “Toujours s’arrêter”.
Exemple : ne s’arrêter qu’au 10ème passage sur ce point d’arrêt :
4) Filtrer
On peut ici définir un filtre basé sur les périphériques, processus ou threads.
Il s’agit d’une expression, permettant d’exécuter le point d’arrêt uniquement si l’on se trouve sur une machine donnée, dans un processus donné, etc…
5) Lorsqu’il est atteint
Cette option permet de spécifier l’action à réaliser une fois le point d’arrêt atteint.
Elle est surtout utilisée pour afficher un message dans la fenêtre de sortie, faisant office de trace d’exécution.
Exemple :
Ceci a pour effet d'inscrire dans la fenêtre de Sortie :
« Arrêt dans la fonction : WindowsFormsApplication1.Form1.Form1_Load(object, System.EventArgs) »
Remarque : cocher la case « Continuer l’exécution » permet dans notre cas d’écrire dans la fenêtre de sortie sans s’arrêter sur le point d’arrêt.
6) Modifier les étiquettes
Ceci permet de « nommer » un point d’arrêt, lui donner un nom facilement repérable.
Ce nom apparaît dans la fenêtre des points d’arrêt :
Super article de Sébastien Silvy.
Quelques compléments bien pratiques avec ces breakpoints et sessions de debug:
– les « Objects-ID » pour pister les instances d’objets à suivre (clic droit dans un Watch)
– les attributs pour modifier l’affichage des objets : DebuggerDisplayAttribute, DebuggerBrowsableAttribute et DebuggerTypeProxyAttribute (c’est ce qui est utilisé dans les listes par exemple pour avoir un affichage custom)
– les visualiseurs pour personnaliser fortement le rendu: par exemple pour créer une fenêtre de preview lorsque l’on passe sur un objet Bitmap.
– les attributs DebuggerStepThrough pour indiquer au moteur d’ignorer le stepping (utile par exemple dans les intercepteurs).