7
votes

Quand utiliser DebuggerDisplayAttribute

Quelles sont les meilleures pratiques autour du débogueurDisplayAttribute ? Qu'est-ce qui guide vos décisions quand et comment appliquer l'attribut à votre code? Par exemple ..

  1. Trouvez-vous déboggerdisplayAttribute plus utile sur certains types d'objets (c'est-à-dire des structures de données personnalisées) plutôt que d'autres?
  2. le définissez-vous sur des types publics, des types internes ou des deux?
  3. allez-vous généralement l'ajouter à la mise en œuvre initiale ou attendez qu'un testeur / utilisateur le demande?
  4. Quand est-il préférable de définir déboggerdisplayAttribute et quand il est plus logique de remplacer .tostring () ?
  5. Avez-vous des lignes directrices sur la quantité de données que vous exposez dans l'attribut ou des limites de la quantité de calcul à inclure?
  6. Toutes les règles d'héritage s'appliquent qui le rendrait plus utile de s'appliquer sur les classes de base?
  7. Y a-t-il autre chose à considérer lorsque vous décidez ou comment l'utiliser?

1 commentaires

C'est automatique. Vous débogez et murmurez-vous aux informations de débogage jusqu'à ce que vous en avez marre et en écrivez un.


4 Réponses :


2
votes

Je l'utilise beaucoup lorsque je sais qu'une section de code nécessitera beaucoup de débogage. Il enregistre un peu de temps lors de la navigation sur les objets du débogueur, surtout si vous utilisez des expressions telles que "{enfantCollection.count}" . Cela vous donne une idée rapide des données que vous regardez.

Je l'ai presque toujours mis sur la classe qui se retrouvera dans des collections afin qu'il soit vraiment rapide de voir chaque article et non seulement d'un groupe d'éléments myNamespace.myclass que vous devez développer.

Mon avis est que Tostring () est utilisé pour fournir une représentation d'utilisateur finale des données. Le débogueurDisplay est destiné aux développeurs, vous pouvez décider d'afficher l'identifiant d'élément, des propriétés internes / privées supplémentaires.


0 commentaires

8
votes

C'est subjectif et j'hésiterais de dire qu'il y a de meilleures pratiques, mais:

  1. Recherchez-vous du débogueurDisplayAttribute plus utile sur certains types d'objets (c'est-à-dire des structures de données personnalisées) plutôt que d'autres?

    De loin l'utilisation la plus courante est des types qui représentent des entités commerciales - et je vais afficher couramment ID + nom. Aussi des types qui seront stockés dans des collections de l'application.

    Autre que je l'ajoutez chaque fois que je me retrouve souvent à la recherche de propriétés dans le débogueur.

    2.friez-vous la définir sur des types publics, des types internes ou des deux?

    les deux.

    3. Pour que vous ajoutez généralement à la mise en œuvre initiale, ou attendez qu'un testeur / utilisateur le demande?

    Les testeurs / utilisateurs ne le verront jamais - il est utilisé uniquement lors du débogage.

    4.Quand est-il préférable de définir le débogueurDisplayAttribute et quand il est donc plus logique de remplacer .Tostring ()?

    remplaçage de tostring () lorsque vous souhaitez la représentation au moment de l'exécution, soit à des fins de journalisation ou spécifiques à l'application. Utilisez DebuggerDisplayAttribute si vous n'en avez besoin que de débogage.

    5. Vous avez des lignes directrices sur la quantité de données que vous exposez dans l'attribut ou des limites de la quantité de calcul à inclure?

    Comme il n'est pas utilisé au moment de l'exécution, la seule contrainte est qu'elle devrait être suffisamment rapide pour ne pas gêner l'expérience de débogage (en particulier lorsqu'elle est appelée plusieurs fois pour des éléments d'une collection).

    Vous n'avez pas besoin de vous préoccuper de l'expulsion de données sensibles comme vous le feriez avec la journalisation de l'exécution (par exemple en priorisant .tostring), car ces données seront visibles de toute façon dans le débogueur.

    6.Les règles d'héritage s'appliquent que cela rendrait plus bénéfique de s'appliquer sur les classes de base?

    Non, appliquez-le sur les classes dont vous en avez besoin.

    7.Est y avoir autre chose à considérer lors de la décision ou à la façon de l'utiliser?

    rien d'autre que je peux penser.


2 commentaires

Merci pour la réponse approfondie. RE: 3, je pensais en particulier d'API publiques que d'autres traverseront un débogueur. Et dans ces cas, évitez-vous d'afficher des données internes qui seraient moins utiles pour le consommateur?


@Scott - Pour être honnête, la plus grande victoire est lorsque vous avez une collection d'objets dans le débogueur et que vous souhaitez trouver rapidement celui qui est intéressant. Dans ce cas, les propriétés qui représentent une sorte d'identifiant et de nom sont les plus utiles - une fois que le développeur a identifié l'élément intéressant, il peut l'ouvrir pour examiner les données internes. Néanmoins, je ne voudrais pas explicitement cacher des données internes, car rien n'est vraiment privé dans le débogueur.



-1
votes

débogueurdisplay a une valeur pour toute classe qui n'a pas de significatif .tostring () implémentation, mais je n'ai pas personnellement vu personne de manière proactive écrire de manière proactive les attributs avant leur sont nécessaires.

en général, Le lien d'Omer's aux meilleures pratiques ressemble à des conseils sonores; Cependant, je me pencherai personnellement de la suggestion d'avoir une méthode dédiée debuggerdisplay () - même s'il est privé, il semble offrir peu d'avantages sur l'attribut à l'écart de la suppression des chaînes magiques.


0 commentaires

6
votes

Mode de débogage sans débogueurDisplay attribut

sans le

Mode de débogage avec débogueurDisplay attribut

avec xxx

débogueurDisplay attribut les meilleures pratiques

Indiquez au débogueur Quoi d'afficher à l'aide de l'attribut de débogueurDisplay (C #, Visual Basic, F #, C ++ / CLI)

< href = "https://youtu.be/i6gdmt-bdou?t=373" rel = "NOFOollow NOREFERRER"> Conseils de débogueur / Diagnostics et astuces dans Visual Studio 2019

Bien que le L'attribut est assez vieux que vous devriez regarder les applaudissements et la réaction du narrateur :) au fait, vous voudrez peut-être se e cette démo complètement dans votre temps libre si vous voulez voir plus de trucs de débogueur.


0 commentaires