【问题标题】:How to get ToString() to show up in Debug如何让 ToString() 显示在调试中
【发布时间】:2011-10-13 07:54:31
【问题描述】:

我想让 ToString() 在调试模式下为我控制的类显示。

如果这是当您将鼠标悬停在变量上时首先显示的内容,那就太好了。有这个属性吗?

【问题讨论】:

  • 谢谢大家。非常方便。
  • 也许是工具/选项/调试/“启用属性评估和其他隐式函数调用”+“在变量窗口中的对象上调用字符串转换函数”。
  • 其他检查,如果您的 ToString 方法抛出异常,调试本地将不会使用它(除非您在下面的答案中使用类属性强制它)。

标签: c# .net debugging visual-studio-debugging


【解决方案1】:

你要找的是DebuggerDisplayAttribute:

http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute

使用上面的链接查看它是如何完成的,然后将其应用到您的课程中,使用ToString() 方法来驱动显示的内容。我只使用过属性,不确定是否可以注入类。

【讨论】:

  • +1 只能接受一个答案,但是这个链接给了我一个直接的例子来说明什么是可能的。
【解决方案2】:

标记你的班级
[System.Diagnostics.DebuggerDisplay("{ToString()}")]

测试:

[System.Diagnostics.DebuggerDisplay("{ToString()}")]
class MyClass
{
    private string _foo = "This is the text that will be displayed at debugging"

    public override string ToString()
    {
        return _foo;
    }
}

现在,当您将鼠标悬停在变量上时,它将显示 This is the text that will be displayed at debugging

【讨论】:

  • 呜呜呜……!!!你有我的好啤酒!我只花了两个小时来解决这个问题。谢谢!
【解决方案3】:

ToString 的输出应该是你在调试时看到的默认值。

可以使用DebuggerDisplay 属性覆盖它(请参阅MSDN)。

我更喜欢重写 ToString 方法,因为它更简单、更通用,因为它在写入日志文件时也很有帮助。

你看到了什么输出?如果您获得类型名称,则会看到默认的 ToString

【讨论】:

  • +1。泰。在大多数情况下,ToString 似乎是它的自然位置。
【解决方案4】:

DebuggerDisplayAttribute 可以让你影响显示。它允许您编写相当复杂的表达式来生成调试输出,尽管it is not recommended to do so

但是,如果您已覆盖 ToString,则调试器会记录为默认显示。也许代码有问题?

【讨论】:

  • 抱歉,我弄错了编辑按钮,我的回复与您的第二次编辑重叠:(
  • @Zebi:回滚,不用担心。
  • +1 不确定隐式访问是什么意思,但我会记住这些性能问题。 “如果表达式引用属性,则这些属性的属性不会被处理”可能是我最需要警惕的事情。
  • @sgtz:它们意味着this 可以在表达式中使用(“具有访问权限”),而您不必键入它(“隐式”)。基本上与this 发生的情况完全相同,例如在类方法中。
  • 如果ToString() 抛出异常,那么VS 调试器将不会显示该值。 DebuggerDisplayAttribute 将强制显示异常消息。但通常你不需要这样做。
【解决方案5】:

在对象中重写.ToString如下:

public class MyObject
{
        public int Property1{ get; set; }
        public string Property2{ get; set; }
        public string Property3 { get; set; }

        public override string ToString()
        {
            return Property3;
        }
}

这会将 Property3 作为 ToString() 值返回

【讨论】:

    【解决方案6】:

    如果您使用的是 Visual Studio,您可以在 yourvariable.ToString() 中添加一个手表 @runtime 行,它会在遇到断点时显示在屏幕底部

    【讨论】:

    • 虽然添加监视变量可以达到目的,但它并不能回答问题。问题是当您在调试模式下将鼠标悬停在变量上时,如何让变量显示工具提示。
    【解决方案7】:

    我遇到了类似的问题。我的班级有一个 ToString() 覆盖,但它仍然没有出现在 VS 中,这很奇怪。

    将属性 [System.Diagnostics.DebuggerDisplay("{ToString()}")] 添加到类中会在 Visual Studio 调试器中显示异常,ToString 应该已显示在该位置。原来我有一个错误,在我的实现中错误地使用了 string.Format()。 这是一个有趣的行为——VS 会在出现异常时恢复到默认的 ToString。 使用提到的属性会强制显示显示方法的输出 - 有效或异常。这对于调试 ToString() 非常有用。否则,将这个属性显式添加到每个类是没有意义的,因为类默认情况下会打开它,除非出于某种原因想要关闭此行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      相关资源
      最近更新 更多