Moins de clics au débogage

Slim Ayache
YounitedTech
Published in
3 min readJun 13, 2019
“La paresse est la mère de toutes les inventions en technologie !” John Sloth

L’attribut en manque d’Amour

Un des plus anciens attributs en .NET, présent dès les premières versions du Framework , et sans doute l’un des plus méconnus est : DebuggerDisplayAttribute .

Il nous permet, en un coup d’œil, de voir le contenu d’un objet en session de Debug sans avoir à cliquer partout comme un fou furieux pour chercher des champs spécifiques, ou à utiliser la fenêtre Immediate, ou à polluer le code avec des lignes supplémentaires compilables en #DEBUG.

Cet attribut, en débogage, a un effet quasi équivalent au ToString() sauf qu’à la différence de ce dernier il nous permet d’insérer des informations exclusivement destinées au développeur sans avoir à implémenter aucune méthode. Regardons de plus près.

Mise en situation

Pour commencer vous pouvez lire la documentation officielle. Ensuite, considérons ce code et ce jeu de données qui contient des objets complexes et des listes :

Supposons que nous cherchons à voir rapidement ces trois informations en session de debug :

  1. Le nombre de contrats dans ce fonds
  2. La référence de chaque crédit
  3. Le code de la maturité de chaque crédit

Nous nous basons sur la fenêtre Locals pour tester ce premier scénario.

Pour répondre à la question 1, nous devons faire 1 clic :

Pour répondre à la question 2, nous devons faire 2 clics + 1 clic par crédit = 4 clics :

Pour répondre à la question 3, nous devons faire 2 clics + 1 clic par crédit + 1 clic par maturité = 6 clics :

Je vous laisse imaginer si la liste contient 100 éléments.

En ajoutant l’attribut…

Nous allons ajouter DebuggerDisplay à la classe Fund et Credit.

Ici nous demandons à afficher la propriété Code ainsi que le nombre de crédits d’un objet de type Fund. Et pour la classe Credit nous voulons ses propriétés ContractReference, Amount et le Code de la propriété CreditMaturity.
La notation est triviale vu qu’elle ressemble à l’interpolation de chaîne .

Reprenons notre test :

Pour répondre à la question 1, 0 clics !

Pour répondre aux questions 2 et 3, 2 clics au total !

Que se passe-t-il si

  • On ajoute un ToString() à Fund : RIEN
  • Une propriété est nulle ou inexistante : RIEN de grave (juste un message mentionnant une erreur => fail gracefully )

Conclusion

Améliorer la qualité du débogage grâce à des pratiques aussi simples que l’ajout de l’attribut ne coûte pratiquement rien, est peu intrusif et fait gagner un temps énorme au développeur surtout lorsqu’il est sur un HotFix et sous pression. Ces attributs sont à utiliser avec sagesse, on devrait les utiliser pour des choses simples et efficaces (typiquement les identifiants) et éviter les effets de bords ou les “NullReferenceException”. Pensez-y !

--

--

Slim Ayache
YounitedTech

Software developer (and I like it). I Speak AR, FR, EN. Interests in photography, music, books and one billion other things.