你有没有盯着调试器窗口中的对象,并但愿你能够经过其余类型的东西来查看这些对象?我固然有!扩展项目以肯定每一个人的身份可能会很是快速。理想状况下,经过特定的属性值快速定位它们会很棒。对咱们来讲幸运的是,Visual Studio有两个鲜为人知的属性,即托管用户称为DebuggerDisplay,本地C ++用户称为Natvis。经过这些属性,您能够自定义在调试器窗口中查看对象的方式,例如Watch,Autos,Locals和datatips!性能
图1 - 带有和不带DebuggerDisplay属性的Locals和DataTips窗口附加到代码spa
经过在类的顶部编写DebuggerDisplay语法,您能够在调试器窗口中的每一个对象节点的顶部选择所需的字符串和属性。除了在调试器窗口中显示字符串外,在DebuggerDisplay属性中添加花括号({})容许Visual Studio显示您指定的属性或方法的值。您还能够向DebuggerDisplay 添加格式说明符,以便进一步更改在调试器窗口中显示和格式化值的方式。在图2中,DebuggerDisplay附加格式说明符“nq”(无引号)。生成的显示将显示字符串属性Title而不包含周围的引号。.net
图2 - 添加到Book类顶部的Basic DebuggerDisplay语法debug
图3 - Locals窗口,上面的DebuggerDisplay语法添加到代码中调试
执行此任务的先前解决方法是覆盖类的ToString()方法。相比之下,DebuggerDisplay控制项目的显示方式而不 覆盖该方法。所以,若是您不想在ToString()方法中调试相关内容(特别是在实际程序中调用该方法时),那么DebuggerDisplay就是您的最佳选择!orm
有时您可能但愿在调试器窗口中显示表达式。好消息:您可使用DebuggerDisplay属性显示表达式!对象
图4 - 包含表达式的DebuggerDisplay属性示例blog
图5 - 具备上述DebuggerDisplay语法和添加的表达式评估的Locals窗口ip
坏消息:在调试代码时,DebuggerDisplay表达式可能会致使其余问题。潜在问题包括大型或复杂表达式的性能命中,表达式语言与正在调试的语言不一样时的编译和运行时错误,以及表达式变异属性时应用程序状态更改。ci
图6 - 添加了Visual Basic样式三元表达式语法的DebuggerDisplay属性
图7 - 在C#中调试时使用上面的Visual Basic样式语法后收到的运行时错误
但不要惧怕!使用表达式减小这些潜在问题的一种方法是建立一个私有属性或方法,该属性或方法返回已执行表达式的字符串并告知DebuggerDisplay显示该属性。
图8 - 建立包含DebuggerDisplay引用的更复杂表达式和格式的私有属性
图9 - 建立一个包含DebuggerDisplay引用的更复杂表达式和格式的方法
DebuggerDisplay与C#,F#和Visual Basic兼容,但若是你在C ++中调试,Natvis是一个很好的选择!虽然不像在DebuggerDisplay类的顶部添加语法那么简单,可是将.natvis文件添加到项目中能够自定义对象的显示方式。
在Solution Explorer中右键单击C ++项目节点,选择Add > New Item,而后选择Visual C ++> Utility> Debugger可视化文件(.natvis)。结果是一个XML文件,您能够在其中控制调试时显示的属性。
要了解有关在调试C ++项目时使用Natvis的更多信息,请查看文档。
有趣的事实:DebuggerDisplay和Natvis属性已经在Visual Studio中使用多年了!这些属性对大多数开发人员很是有用,但仍然不像它们能够发现和众所周知的那样。所以,咱们目前正在努力提供一种更简单的方法来更好地发现这些属性,您的反馈将有助于实现这一目标!请完成此调查,这将使咱们可以在使用这些属性时提供改进的体验。