如何在Debug中显示ToString()

时间:2011-07-26 11:01:51

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

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

当你用鼠标悬停在一个变量上时,这是第一个出现的事情,这很好。这有属性吗?

7 个答案:

答案 0 :(得分:25)

标记你的课程
[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

答案 1 :(得分:7)

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

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

答案 2 :(得分:5)

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

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

我更喜欢覆盖ToString方法,因为它更容易,更通用,因为它在写入日志文件时也有帮助。

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

答案 3 :(得分:4)

您要找的是DebuggerDisplayAttribute

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

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

在对象中覆盖.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 :(得分:0)

如果你正在使用visual studio,你可以添加一个watch @ runtime和你的变量.ToString() 线,当它到达断点时,它将显示在屏幕的底部