Debogage améliorer avec Visual Studio

Aujourd’hui, je voudrais vous présenter un attribut du Framework .Net qui est fort utile, mais trop souvent méconnus.
A chaque fois que j’en parle autour de moi, ça fais mouche, les développeurs adorent.

Cet attribut est DebuggerDisplayAttribute qui va nous aider donner plein de bonheur lors des phases de debogage, et en plus il est tout simple à utiliser.


Plutôt qu’un long discours de comment il fonctionne, ce qu’il fait et comment l’utiliser, voici une petite démo.
Pour l’exemple j’utilise la classique classe Personne:

public class Personne
{
    public string Nom { get; set; }
    public string Prenom { get; set; }
}


Un fois en debug et lorsqu’on observe une instance de notre classe dans la fenêtre d’espion (watch) ou en tooltip lorsque la souris est sur notre objet.
espion de visualstudio
On voit que la valeur de notre classe est un simple ToString() soit le namespace et le nom de la classe.


On ajoute l’attribut DebuggerDisplay (qui se trouve dans le namespace System.Diagnostics dans l’assembly du même nom) à notre classe.

[DebuggerDisplay(« {Prenom} – {Nom} »)]
Public Class Personne {
    …..
}


on re-debug
Espion avec DebuggerDisplay
Cette fois la valeur de notre classe utilise le formatage indiqué dans l’attribut DebuggerDisplay.


Dans les accolades, il est possible de mettre des prorpiétés , des fonctions, et même evalué une expression par exemple (simple et pas des meilleurs) {DateTime.Now.Year – DateNaissance.Year}.
Attention toutefois dans le cas d’objet avec pas mal de propriétés ou de propriétés calculées (éventuellement par une fonction), ou même si vous vouliez afficher le retour d’une fonction: mettre trop de propriétés ou évaluer des fonctions peux être coûteux à l’exécution.

Une astuce envisageable c’est de faire une fonction privé (en débug “tout” est visible) qui ne sert que à l’affichage de l’ensemble des informations voulus

[DebuggerDisplay(« {ForDebug} »)]
Public Class Personne {
    …..
 
    private string ForDebug() {
          return string.format(“{0} – {1}”, Prenom, Nom);
    }
}


Enfin pour un contrôle encore plus fin de votre affichage de débug dans visual studio, vous pouvez aussi utiliser les attributs du Framework .Net suivant : DebuggerTypeProxy et DebuggerBrowsable


Vous voila prêt pour briller un peu plus au près de vos collègues et d’utiliser encore mieux Visual Studio.
Bon debug.

PS : ça existe depuis .Net 2.0 soit Visual Studio 2005

code