Un problème familier avec VisualStudio est l'appel mystérieux de getters de propriété. Si ceux-ci ont des effets secondaires (le plus commun étant le formulaire if (foo == null) foo = new foo(); return foo;
), alors le fait que les fenêtres Locales et Fenêtres du débogueur appellent les propriétés - sans même atteindre de points de rupture - peut conduire à des effets inattendus lors du débogage.Comment est-ce que je peux trouver quels getters de propriété ont des effets secondaires en utilisant NDepend?
Il y a une solution simple à cela: tout simplement marquer la propriété avec l'attribut
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
Alors, comment puis-je trouver des getters qui peuvent avoir des effets secondaires dans une grande base de code?
NDepend est l'outil de choix pour ce genre de chose: en utilisant son langage CQL je peux trouver toutes les propriétés qui, par exemple, modifier directement l'état de leur instance contenant:
SELECT METHODS FROM ASSEMBLIES "FOO"
WHERE IsPropertyGetter AND ChangesObjectState
Cela ne trouve ces getters qui changent directement un champ: comment puis-je trouver ceux qui le modifient indirectement, par exemple en appelant une méthode Initialize()
?
Merci Patrick. Incidemment, est-il possible d'utiliser CQL pour trouver si une méthode est potentiellement utilisée via une interface? –
Joel, à peu près tout est possible maintenant grâce à CQLinq (voir ma nouvelle réponse) Il suffit de poser une nouvelle question si vous avez d'autres besoins. –
Fantastique, continuez votre bon travail! –