7

围绕DebuggerDisplayAttribute有哪些最佳实践?是什么指导您决定何时以及如何将属性应用于您的代码?例如..

  1. 您是否发现DebuggerDisplayAttribute某些类型的对象(即自定义数据结构)比其他对象更有用?
  2. 您是在公共类型、内部类型还是两者上定义它?
  3. 您通常会将它添加到初始实现中,还是等待测试人员/用户请求它?
  4. 什么时候定义更好,DebuggerDisplayAttribute什么时候重写更有意义.ToString()
  5. 您是否有关于在属性中公开多少数据的指导方针,或者对要包含的计算量的限制?
  6. 是否有任何继承规则适用于基类?
  7. 在决定何时或如何使用它时,还有什么需要考虑的吗?
4

4 回答 4

8

这是主观的,我不敢说有任何最佳实践,但是:

  1. 您是否发现 DebuggerDisplayAttribute 在某些类型的对象(即自定义数据结构)上比其他对象更有用?

到目前为止,最常见的用途是表示业务实体的类型——我通常会显示 ID + 名称。还有将存储在应用程序集合中的任何类型。

除此之外,每当我发现自己经常在调试器中搜索属性时,我都会添加它。

2.您是在公共类型、内部类型还是两者上定义它?

两个都。

3.您通常会将它添加到初始实现中,还是等待测试人员/用户请求它?

测试人员/用户永远不会看到它——它只在调试时使用。

4.什么时候定义DebuggerDisplayAttribute更好,什么时候重写.ToString()更有意义?

当您需要运行时的表示时,覆盖 ToString() ,用于日志记录或特定于应用程序的目的。如果您只需要它进行调试,请使用 DebuggerDisplayAttribute。

5.你有关于你在属性中暴露多少数据的指导方针,或者对包含的计算量有限制吗?

由于它不在运行时使用,唯一的限制是它应该足够快而不会妨碍调试体验(尤其是在为集合元素多次调用时)。

您不需要像使用运行时日志记录那样担心暴露敏感数据(例如通过覆盖 .ToString),因为无论如何这些数据在调试器中都是可见的。

6.是否有任何继承规则适用于基类?

不,将其应用于您需要的课程。

7.在决定何时或如何使用它时,还有什么需要考虑的吗?

没有别的我能想到的。

于 2011-04-07T05:54:33.937 回答
6

DebuggerDisplay无属性调试模式

没有属性

DebuggerDisplay带属性的调试模式

与 attr

[DebuggerDisplay("{Name,nq}")]//nq suffix means no quotes 
public class Product {

    public int Id { get; set; }

    public string Name { get; set; }

    //Other members of Northwind.Product
}

DebuggerDisplay 属性最佳实践

使用 DebuggerDisplay 属性(C#、Visual Basic、F#、C++/CLI)告诉调试器要显示什么

Visual Studio 2019 中的调试器/诊断提示和技巧

虽然属性很老,但你应该看看掌声和解说员的反应:) 顺便说一句,如果你想看更多的调试器技巧,你可能想在空闲时间完全看这个演示。

于 2020-07-28T12:52:51.990 回答
2

当我知道代码部分需要大量调试时,我经常使用它。在调试器中浏览对象时,它可以节省一些时间,尤其是在您使用诸如"{ChildCollection.Count}". 它可以让您快速了解正在查看的数据。

我几乎总是把它放在最终会出现在集合中的类上,这样就可以很快地看到每个项目,而不仅仅是你必须扩展的一堆 MyNamespace.MyClass 元素。

我的观点是,ToString()它用于提供数据的最终用户表示。DebuggerDisplay 是为开发者准备的,你可以决定显示元素 ID,一些额外的内部/私有属性。

于 2011-04-07T05:42:26.227 回答
-1

DebuggerDisplay对于没有有意义的.ToString()实现的任何类都有价值,但我个人还没有看到有人主动编写属性,直到需要它们。

总的来说,Omer与最佳实践的链接看起来像是中肯的建议。但是,我个人会放弃使用专用DebuggerDisplay()方法的建议-即使它是私有的,除了删除魔术字符串之外,它似乎对属性没有什么好处。

于 2011-04-07T13:19:46.947 回答