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

Waf*_*fle 1 c# debugging visual-studio visual-studio-debugging

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

作为一个具体的例子,对于CodeTypeReference,我想看到基于BaseType字符串或ArrayElementType值引用的类型的文本表示(where valid),而不是看到"System.CodeDom.CodeTypeReferenceExpression".

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

数据提示是每个变量而不是每种类型.

最接近的似乎是DebuggerTypeProxyAttribute,在这种情况下,我想我问"是否有可能将属性应用于其他人的类?"

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

Ome*_*viv 7

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

  1. 通过使用OzCode(以前BugAid为Visual Studio),我创建了一个商业工具,你可以简单地在你的类型的属性/字段,以及有那些出现在值列上的任何类型,无论是第三方还是不行.

  2. 您可以更改autoexp.cs文件,并将DebuggerDisplayAttribute或DebuggerTypeProxyAttribute应用于第三方类型,如我在类似问题的答案中所述.例如,这是将DebuggerDisplayAttribute应用于System.Drawing.Pen的方法:[assembly: DebuggerDisplay(@"\{Color = {color}}", Target = typeof(Pen))]

这个答案适用于VS2008和VS2010.

  • 或者甚至删除版本/文化/公钥标记并使用`[assembly: DebuggerDisplay(@"ProofInPudding {_privateStringData}", TargetTypeName = "MyNamespace.MySubNamespace.MyClassName, MyAssemblyName")]` (2认同)