DebuggerDisplay在运行时解析为字符串

Oli*_*ich 14 c# debugging error-handling attributes

有没有办法访问DebuggerDisplayAttribute运行时显示的字符串?

对于我们的业务对象,我尝试获取有关异常处理的自动调试器信息.捕获异常时使用的实际对象应序列化为文本以增强异常消息.由于某些属性具有其他业务对象作为类型,因此如果递归使用,这可能会变得非常长.因此,我想序列化只是已经在DebuggerDisplay类的属性中定义的信息.ToString()类的实现可能不同,不能用于此任务.

那么是否可以在运行时获取调试器中显示的字符串?

Mik*_*tly 5

我不这么认为(至少没有你的努力) - 我刚刚做了一些挖掘,发现这篇关于调试器显示最佳实践的文章.它没有直接关系,但确实突出了一件事:

必须单独评估每个属性{expression hole},并在每个调试器显示窗口中对此类型的每个实例执行一次.

我希望一旦代码被破解,它就会使用调试器进行评估(类似于当你处于断点时使用立即窗口来评估语句的方式).

它的长短之处在于,在运行时,您无法获得对象的结果调试器显示值,除非您愿意解析每个表达式孔并使用反射来自行评估它们.

本文建议提供调试器输出的最有效方法是让私有方法对要显示的所有属性执行String.Format.您可能需要考虑将其设置为公共方法(可能在接口上)并使用此方法从中检索您的异常信息.


Pao*_*sco 2

可能有某种方法可以提取该信息,但是使用如下属性重新定义这些类不是更容易吗:

[DebuggerDisplay("{InfoProperty}")]
class X {
    public string InfoProperty {
        get { return "Debug and display info here"; }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您将其包含InfoProperty在错误消息/日志中,而不是挖掘 Visual Studio 重建显示数据的方式。

当然,我假设您可以修改业务对象类,但情况可能并非如此......