代码之家  ›  专栏  ›  技术社区  ›  bwerks

调试:[DebuggerDisplay]或ToString()?

  •  74
  • bwerks  · 技术社区  · 15 年前

    有两种方法可以提高调试信息而不是查看信息的有用性 {MyNamespace.MyProject.MyClass} 在调试器中。

    DebuggerDisplayAttribute 以及 ToString() 方法。

    using System.Diagnostics;
    ...
    
    [DebuggerDisplay("Name = {Name}")]
    public class Person
    {
        public string Name;
    }
    

    public class Person
    {
        public string Name;
        public override string ToString()
        {
            return string.Format("Name = {0}", Name);
        }
    }
    

    有什么理由选择一个而不是另一个吗?有什么理由不同时做这两件事吗?这纯粹是个人喜好吗?

    3 回复  |  直到 5 年前
        1
  •  95
  •   Reed Copsey    15 年前

    使用 [DebuggerDisplay] 仅适用于调试器。重写ToString()的“副作用”是在运行时更改显示。

    这可能是好事,也可能不是好事。

    ToString() 输出,在这种情况下,您可以同时使用这两种输出。

    例如,在您的例子中,“ToString”实现对我来说似乎很奇怪。我希望“Person”类ToString()实现只直接返回名称,而不是“Name=PersonsName”。但是,在调试期间,我可能需要这些额外的信息。

        2
  •  5
  •   Wizou    7 年前

    还可以考虑调试器的慢度:

    DebuggerDisplayAttribute 格式表达式为 在每个调试步骤/断点之后由调试器执行。

    ToString 因此,调试器执行起来要快得多。

    这与条件断点是一样的:如果条件表达式太慢,每次执行到达断点时调试器都无法解释,那么删除断点并添加如下临时代码可能会很有用: if (condition) Debugger.Break();

        3
  •  5
  •   Gonzo345 Piotr Perak    6 年前

    创建自定义类或结构时,应重写 ToString方法,以便向 “客户端代码。” MSDN

    如果什么 ToString() 返回,您在调试器中看到的不是您希望使用的 DebuggerDisplayAttribute .

        4
  •  0
  •   Peter Bruins    4 年前

    DebuggerDisplay 它的能力非常有限。只有一个格式字符串可以用来显示某些成员的值。

    ToString() 可能是你唯一的选择。

    推荐文章