自定义Visual Studio调试器中的对象显示方式
你有没有盯着调试器窗口中的对象,并希望你可以通过其他类型的东西来查看这些对象?我当然有!扩展项目以确定每个人的身份可能会非常快速。理想情况下,通过特定的属性值快速定位它们会很棒。对我们来说幸运的是,Visual Studio有两个不为人知的属性,即托管用户称为DebuggerDisplay,本地C ++用户称为Natvis。通过这些属性,您可以自定义在调试器窗口中查看对象的方式,例如Watch,Autos,Locals和datatips!
图1 - 带有和不带DebuggerDisplay属性的Locals和DataTips窗口附加到代码
什么是DebuggerDisplay属性?
通过在类的顶部编写DebuggerDisplay语法,您可以在调试器窗口中的每个对象节点的顶部选择所需的字符串和属性。除了在调试器窗口中显示字符串外,在DebuggerDisplay属性中添加花括号({})允许Visual Studio显示您指定的属性或方法的值。您还可以向DebuggerDisplay 添加格式说明符,以便进一步更改在调试器窗口中显示和格式化值的方式。在图2中,DebuggerDisplay附加格式说明符“nq”(无引号)。生成的显示将显示字符串属性Title而不包含周围的引号。
图2 - 添加到Book类顶部的Basic DebuggerDisplay语法
图3 - Locals窗口,上面的DebuggerDisplay语法添加到代码中
执行此任务的先前解决方法是覆盖类的ToString()方法。相比之下,DebuggerDisplay控制项目的显示方式而不 覆盖该方法。因此,如果您不想在ToString()方法中调试相关内容(特别是在实际程序中调用该方法时),那么DebuggerDisplay就是您的最佳选择!
我可以在调试器窗口中显示每个对象的表达式吗?
有时您可能希望在调试器窗口中显示表达式。好消息:您可以使用DebuggerDisplay属性显示表达式!
图4 - 包含表达式的DebuggerDisplay属性示例
图5 - 具有上述DebuggerDisplay语法和添加的表达式评估的Locals窗口
坏消息:在调试代码时,DebuggerDisplay表达式可能会导致其他问题。潜在问题包括大型或复杂表达式的性能命中,表达式语言与正在调试的语言不同时的编译和运行时错误,以及表达式变异属性时应用程序状态更改。
图6 - 添加了Visual Basic样式三元表达式语法的DebuggerDisplay属性
图7 - 在C#中调试时使用上面的Visual Basic样式语法后收到的运行时错误
但不要害怕!使用表达式减少这些潜在问题的一种方法是创建一个私有属性或方法,该属性或方法返回已执行表达式的字符串并告知DebuggerDisplay显示该属性。
图8 - 创建包含DebuggerDisplay引用的更复杂表达式和格式的私有属性
图9 - 创建一个包含DebuggerDisplay引用的更复杂表达式和格式的方法
与C ++用户的DebuggerDisplay等效的功能是什么?
DebuggerDisplay与C#,F#和Visual Basic兼容,但如果你在C ++中调试,Natvis是一个很好的选择!虽然不像在DebuggerDisplay类的顶部添加语法那么简单,但是将.natvis文件添加到项目中可以自定义对象的显示方式。
图10 - 在Locals窗口中使用Natvis的示例
在Solution Explorer中右键单击C ++项目节点,选择Add > New Item,然后选择Visual C ++> Utility> Debugger可视化文件(.natvis)。结果是一个XML文件,您可以在其中控制调试时显示的属性。
图11-对应于上面显示的显示的示例Natvis文件
要了解有关在调试C ++项目时使用Natvis的更多信息,请查看文档。
这些功能非常棒,可以节省很多时间!如何帮助与其他人共享DebuggerDisplay和Natvis?
有趣的事实:DebuggerDisplay和Natvis属性已经在Visual Studio中使用多年了!这些属性对大多数开发人员非常有用,但仍然不像它们可以发现和众所周知的那样。因此,我们目前正在努力提供一种更简单的方法来更好地发现这些属性,您的反馈将有助于实现这一目标!请完成此调查,这将使我们能够在使用这些属性时提供改进的体验。
自定义Visual Studio调试器中的对象显示方式的更多相关文章
- 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件
查找并指定符号文件和源文件:指定符号加载行为.使用符号和源服务器上:加载符号自动或在要求. 内容 查找符号 (.pdb) 文件 查找源文件 查找符号 (.pdb) 文件 说明 在之前的 Vis ...
- 在Visual Studio调试器中显示Unreal的数据类型的值
转自:https://blog.csdn.net/witton/article/details/5977766 在Unreal引擎中大量使用了自定义的数据类型如:FName,FString,TArra ...
- C#比较两个对象是否为同一个对象。 Visual Studio调试器指南---多线程应用程序调试(一)
两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...
- 使用 Visual Studio 调试器附加到运行的进程
为什么调试附加进程? Visual Studio 调试器可以附加到在 Visual Studio 外运行的进程. 可以使用此附加功能执行以下操作: 调试并非在 Visual Studio 中创建的应用 ...
- Visual Studio调试器指南---多线程应用程序调试(一)
线程是操作系统向其授予处理器时间的指令序列. 在操作系统中运行的每个进程都包含至少一个线程. 包含多个线程的进程称为多线程.有多个处理器.多核处理器或超线程进程的计算机可以同时运行多个线程. 使用多个 ...
- 【Asp.net入门4-02】使用Visual Studio调试器
- Visual Studio 调试系列9 调试器提示和技巧
系列目录 [已更新最新开发文章,点击查看详细] 01 固定数据提示 如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看. 即使在重新启动后,固定的变量也能 ...
- 12个Visual Studio调试效率技巧
在这篇文章中,我们假定读者了解VS基本的调试知识,如: F5 开始使用调试器运行程序 F9 在当前行设置断点 F10 运行到下一个断点处 F5 从被调试的已停止程序恢复执行 F11 步进到函数内(如果 ...
- Visual Studio 调试系列10 附加到正在运行的进程
系列目录 [已更新最新开发文章,点击查看详细] 可将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程. 进程运行后,在 Visual Studio 中选择“调试” & ...
随机推荐
- java之可变个数的形参
//采用数组形参来定义方法 public static void test (int a, String[] books); //采用可变个数形参来定义方法 public static void te ...
- java大数习题
大数加法,题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 import java.math.BigInteger; import java.ut ...
- sublime插件开发教程1
学习sublime插件开发 好处有很多 比方说微信小程序插件 他官方自带的功能太鸡肋了 可以开发个sublime插件 写智能提示 甩掉微信几条街 sublime插件是用python开发的 所以学习s ...
- NIO中Buffer的重要属性关系解析
Buffer 是java NIO中三个核心概念之一 缓存, 在java的实现体系中Buffer作为顶级抽象类存在 简单说,Buffer在做什么? 我们知道,在java IO中体系中, 因为InputS ...
- Python中为什么不能用可变对象作为默认参数的值
def func(numbers = [], num=1): numbers.append(num) for number in numbers: print(number) func() >& ...
- 创建线程之三:实现Callable接口
通过Callable和Future创建线程 i. 创建Callable接口的实现类,并实现call方法,该call方法将作为线程执行体,并且有返回值,可以抛出异常. ii. 创建Callable实现类 ...
- golang-方法和接口
1.方法 方法类似函数 ,多了一个接收者 ,接收者是指针指向结构体(也可以是值) ,方法与结构体绑定 (可以理解为模板定义方法) ,方法位于结构体内部 方法集可以理解就是多个方法 可以组合其他结构体方 ...
- Eclipse 的快捷键
1. 代码折叠的快捷键,默认是: Ctrl+Shift+Numpad_Divede(小键盘的/号) Ctrl+Shift+Numpad_Multiply(小键盘的*号) 2.删除一行:Ctrl+D 3 ...
- SAP depreciation key config
正常折旧 Configure 1.分配总帐科目 spro进入后台配置 –> Financial Accounting(New) –> Asset Accounting –> Depr ...
- 利用QQ获取ip
首先启动任务管理器,选择性能选型,点击打开资源管理器 点击网络,找到qq.exe 点击下面的TCP链接 最好让你的qq好友发一个离线文件,在接收的时候注意远程连接,即使您所要的你好友的ip地址