何时使用DebuggerDisplayAttribute

Sco*_*ner 5 .net c# debugging visual-studio debuggerdisplay

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

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

Joe*_*Joe 6

这是主观的,我会毫不犹豫地说有任何最佳做法,但是:

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

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

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

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

都.

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

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

4.何时更好地定义DebuggerDisplayAttribute以及何时覆盖.ToString()更有意义?

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

5.您是否有关于在属性中公开了多少数据的指南,或者包含的计算量限制?

因为它没有在运行时使用,唯一的限制是它应该足够快,不会妨碍调试体验(特别是当多次调用集合的元素时).

您不需要像使用运行时日志记录那样关注暴露敏感数据(例如,通过重写.ToString),因为这样的数据无论如何都会在调试器中可见.

6.是否适用任何继承规则可以更有效地应用于基类?

不,将它应用于您需要的类.

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

没有别的我能想到的.


gur*_*kan 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
}
Run Code Online (Sandbox Code Playgroud)

DebuggerDisplay 属性最佳实践

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

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

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