调试时,有各种Variable窗口(autos,locals,watch),其中包含Name,Value,Type列。 该值通常似乎显示对象的类名。在特定情况下,我想根据类实例的属性显示更有意义的内容。
作为一个具体示例,对于CodeTypeReference,我希望基于BaseType字符串或ArrayElementType值看到引用类型的文本表示(有效),而不是看到“System.CodeDom.CodeTypeReferenceExpression”。
可视化工具似乎提供单独的对话框窗口,而不是填充值列的方法。
数据提示是按变量而不是每种类型。
最接近的事情似乎是DebuggerTypeProxyAttribute,在这种情况下,我想我会问“是否可以将属性应用于其他人的课程?”
我主要处理Visual Studio 2010,尽管Visual Studio 2008的答案很有用。
答案 0 :(得分:7)
是的,有两种方法可以实现这一目标:
通过使用我创建的商业工具OzCode(以前是Visual Studio的BugAid),您可以在类型上简单地star属性/字段,并将其显示在值中任何类型的列,无论是否为第三方。
您可以更改autoexp.cs文件,并将DebuggerDisplayAttribute或DebuggerTypeProxyAttribute应用于第三方类型,如my answer on a similar question中所述。例如,这是将DebuggerDisplayAttribute应用于System.Drawing.Pen的方法:[assembly: DebuggerDisplay(@"\{Color = {color}}", Target = typeof(Pen))]
此答案适用于VS2008和VS2010。
答案 1 :(得分:1)
您可以为自己的类重写ToString方法。 Value通常只是对ToString的调用,如果没有重写,则显示类型。
更新:对于没有代码的类,我无法提供有价值的答案,而不是可以包装类(继承自),但那是,嗯,很有礼貌(恕我直言)。
答案 2 :(得分:0)
是的,您可以将DebuggerTypeProxyAttribute应用于您不拥有的类型(除非它们是私有的),如我对类似问题here的回答
所述