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

本文关键字:窗口 变量 显示 调试器 Studio 第三方 Visual 是否 | 更新日期: 2023-09-27 18:10:33

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

作为一个特定的例子,对于codetypererence,我希望看到基于BaseType字符串或ArrayElementType值的引用类型(在有效的情况下)的文本表示,而不是看到"System.CodeDom.CodeTypeReferenceExpression"。

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

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

最接近的事情似乎是DebuggerTypeProxyAttribute在这种情况下,我想我在问"是否有可能将一个属性应用到别人的类?"

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

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

是的,有两种方法可以做到这一点:

  1. 通过使用OzCode(以前BugAid for Visual Studio),我创建的一个商业工具,你可以简单地在你的类型上标记属性/字段,并让它们出现在任何类型的值列中,无论它是第三方的。

  2. 你可以改变你的autoexp.cs文件,并应用DebuggerDisplayAttribute或DebuggerTypeProxyAttribute到第三方类型,如我对类似问题的回答所述。例如,这就是你如何将DebuggerDisplayAttribute应用到System.Drawing.Pen: [assembly: DebuggerDisplay(@"'{Color = {color}}", Target = typeof(Pen))]

这个答案适用于VS2008和VS2010。

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

更新:对于你没有代码的类,我不能提供一个有价值的答案,而不是你可以包装类(继承自),但那是,嗯,奇怪的是礼貌(IMHO)。

是的,你可以将DebuggerTypeProxyAttribute应用于你不拥有的类型(除非它们是私有的),正如我对这里类似问题的回答所解释的