是否可以更改第三方类的Visual Studio调试器变量窗口值列中显示的内容?

时间:2011-10-05 10:51:42

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

调试时,有各种Variable窗口(autos,locals,watch),其中包含Name,Value,Type列。 该值通常似乎显示对象的类名。在特定情况下,我想根据类实例的属性显示更有意义的内容。

作为一个具体示例,对于CodeTypeReference,我希望基于BaseType字符串或ArrayElementType值看到引用类型的文本表示(有效),而不是看到“System.CodeDom.CodeTypeReferenceExpression”。

可视化工具似乎提供单独的对话框窗口,而不是填充值列的方法。

数据提示是按变量而不是每种类型。

最接近的事情似乎是DebuggerTypeProxyAttribute,在这种情况下,我想我会问“是否可以将属性应用于其他人的课程?”

我主要处理Visual Studio 2010,尽管Visual Studio 2008的答案很有用。

3 个答案:

答案 0 :(得分:7)

是的,有两种方法可以实现这一目标:

  1. 通过使用我创建的商业工具OzCode(以前是Visual Studio的BugAid),您可以在类型上简单地star属性/字段,并将其显示在值中任何类型的列,无论是否为第三方。

  2. 您可以更改autoexp.cs文件,并将DebuggerDisplayAttribute或DebuggerTypeProxyAttribute应用于第三方类型,如my answer on a similar question中所述。例如,这是将DebuggerDisplayAttribute应用于System.Drawing.Pen的方法:[assembly: DebuggerDisplay(@"\{Color = {color}}", Target = typeof(Pen))]

  3. 此答案适用于VS2008和VS2010。

答案 1 :(得分:1)

您可以为自己的类重写ToString方法。 Value通常只是对ToString的调用,如果没有重写,则显示类型。

更新:对于没有代码的类,我无法提供有价值的答案,而不是可以包装类(继承自),但那是,嗯,很有礼貌(恕我直言)。

答案 2 :(得分:0)

是的,您可以将DebuggerTypeProxyAttribute应用于您不拥有的类型(除非它们是私有的),如我对类似问题here的回答

所述