Visual C++ 2015 中的可视化调试工具

11/29/2015

8 分钟可看完

本文内容

[原文发表时间] 2015/09/28 10:27 PM

当调试本地应用程序时,通常查看内存中具体对象的值非常有用,不论是自定义的字符串格式,甚至或是对数据执行操作,使其更有意义和更容易解释。自 VS2012,Visual Studio 提供了 .natvis 可视化工具设计来为不同类型的C/C++ 类型声明自定义可视化。可视化的类型改变了对象在本地表达式计算器的显示方式,包括在监视和变量窗口以及调试数据提示。额外关于表达式计算器的信息,参考这篇文档和这篇博客.

编写简单的可视化工具

让我们从创建一个本地的Volcano类开始:

Using Namespace std;

class Volcano

{

private:

string m_EnglishName;

string m_nativeName;

string m_meaning;

int m_elevation;

//...rest of class definition

}

Natvis 项目模板

在VS2015中很容易用内置模板添加一个新的.natvis文件到一个工程,可以发现在添加新项目-实用 > 下-> 调试器可视化文件 (.natvis):

为了使我们Volcano对象更容易调试,我们将让显示字符串等于英文名字由于它是关联volcano对象中最好识别的实体。然后我们将创建一个扩展视图以显示所包含的成员。要删除前两个字符串的引号我们将在母语和英语的名字上应用到格式说明符,但会使它失去成员意义因为在调试时引号标记将有助于区分定义。因为我们整数 m_elevation 已经是清晰可读,我们将简单地列出这类变量,而无需修改。

下面是简单.natvis 可视化用于调试时根据需要在 c + + 表达式计算器显示我们Volcano对象。注意节点上的大括号运算符,他会使值在应用程序调试时替换。这允许使用常规文本值以及调试对象中的值在输出。

Name: {m_EnglishName,sb}

m_nativeName,sb

m_meaning

m_elevation

Volcano对象的可视化的视图

一旦.natvis 文件集成到项目中, Volcano对象将在下面的可视化的监视窗口中所示。[原始视图] 节点可以展开很容易看到默认视图:

有关编写类型可视化工具里面.natvis 文件的更多信息,请查阅写作基本类型的可视化工具的完整文档。

VS2015 中的新可视化功能

Natvis 文件的项目集成

如图所示,使用上面的模板和 VS2015 早期预览,.natvis 文件现在可以添加到项目或解决方案中并从中获益源代码,在构建未来消费的调试器能够链接到PDB的能力。除了个别的项目,对于.exe 项目,你也可以添加一个.natvis 文件作为高层解决方案的项目。手动将.natvis 文件拷贝到特殊目录下是不再必要的!

如果遇到同一类型的多个有效的条目,首先使用下面的列表:

PDB

Project/solution

User directory: %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers

Install directory: %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers

在调试时修改可视化工具

下面的动画演示了顶层对象的显示字符串从m_nativeName改变为m_EnglishName。对.natvis 文件的更改将立即被调试器检测到,并以红色文本显示差异:

改进的数组和向量调试

现在在表达式求值程序中支持[] 元素访问操作符,并且可以使用监视窗口以及在 .natvis文件的和 元素. 这里有在监视窗口中的一个实例:

哈希表可视化CAtlMap

现在CATLMap 数据结构成员可以扩展为可视化的键和值对。

Natvis 诊断的改进

诊断问题在您自定义的.natvis 文件中是相对比较容易的。旧的 EnableNatvisDiagnostics 注册表开关已不再被使用。相反,现在你可以在工具-选项-调试-输出窗口 中启用 natvis 诊断工具,并选择其中一个选项:"关闭","错误"、"警告"和"详细",并将提供关于 XML 的解析失败的其他信息:

新的 Natvis 属性

" 可选 " 属性

•Any 节点可以具有"可选"属性。

• 如果任何子表达式的一个可选节点解析失败,只有将该节点抛出。其余的 条目仍然是有效的。先前对于这种类型的整个可视化将会失败。

•例如,你可能有一个只在调试配置中存在的成员,并且此功能允许您可以为条目跨越数据类型提供一个单一的.natvis 条目:

struct Foo

{

int i;

int j;

#if _DEBUG

std::string debugMessage;

#endif

};

的 " 继承 " 属性

· In VS2013,每个natvis条目不仅适用于指定的类型,还适用于所有派生类型。

· 大多数的时间,是基于反馈,但是有时是不可取的。(例如: 你可能想查看没有掩盖它的基对象的 natvis 派生对象的原始成员)

· In VS2015,"可继承"属性允许您控制此行为。默认值为"true"。如果为 false,natvis 条目只适用于基类。

" 优先级 " 属性

· "低","中低“ "中等","中高" "高",默认是"中等"

· 凡文件来自 (项目、 用户目录、 安装目录) 胜过优先级属性

· 示例: std::vector VS2013 声明"中低"优先默认情况下,使用 VS2015 版本,即使两个仍在维持传统的调试支持的可视化的文件中定义。针对旧的v120的工具集,如果你想要利用遗留的可视化工具,VC2013实现切换到”中高“ 或”高“, 这将覆盖中等默认优先级v140实施。

Android 的调试

VS2015 介绍了支持开发和调试 c + + Android 应用程序,通常包括基本.natvis 对许多常用 stl 容器支持。

Natvis 的其他改进

·和 现在可以使用 级别,而不是只对单个元素

· 节点现在可以指定"条件"、"IncludeView"或"ExcludeView"属性

· Natvis 作用于自动窗口的函数返回值

· Natvis 作用于优化成一个寄存器结构

· 当natvis 条目递归引用其他的 natvis 条目时改进健壮性

未来的博客文章将讨论更高级的调试可视化工具Visual Studio中可用的选项。

vs2015如何调试c语言,Visual C++ 2015 中的可视化调试工具相关推荐

  1. 微软移除Visual Studio 2015中的UML

    微软已经在Visual Studio 2015中移除了UML(Unified Modeling Language,统一建模语言),原因是该语言使用率过低.因此微软要优化产品结构,把好钢用在刀刃上. V ...

  2. 在Visual Studio 2015中使用Git

    1. VS2015在对Git的支持 VS2015是微软IDE集成开发环境的重量级升级,微软除了将触角延伸至iOS和Android平台以及Unity,Unreal和Cocos等游戏开发领域中.而且在进一 ...

  3. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git...

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git--在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  4. Visual Studio 2015中使用Git

    (转载)在Visual Studio 2015中使用Git 原文:http://blog.csdn.net/damon316/article/details/51885802 1.VS2015在对Gi ...

  5. 在Visual Studio 2015中使用Grunt、Bowe

    基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.Ja ...

  6. GitHub在Visual Studio 2015中获得TFS/VSO同等地位

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 在Visual Studio 2015中微软为GitHub提供了扩展插件,从而让GitHub ...

  7. VS2015--win32project配置的一些想法之在 Visual Studio 2015 中进行调试的同一时候分析性能...

    出处: https://msdn.microsoft.com/zh-cn/magazine/dn973013(en-us).aspx 很多开发商花了绝大多数时间获取应用程序才干正常发挥作用.更少的时间 ...

  8. 在Visual Studio 2015中使用TortoiseGit

    1. VS2015在对Git的支持 VS2015是微软IDE集成开发环境的重量级升级,微软除了将触角延伸至iOS和Android平台以及Unity,Unreal和Cocos等游戏开发领域中.而且在进一 ...

  9. [No0000A6]Visual Studio 2015 中的常用命令的默认键盘快捷键-VS2015 Shortcut

    注意:你也可以通过打开"选项"对话框,展开"环境"节点,然后选择"键盘",查找任何命令的快捷键. Build(生成) 命令 键盘快捷键 [上 ...

最新文章

  1. Python学习 8day__高级语法
  2. Can not find the tag library descriptor for http://java.sun.com/jsp/jstl/
  3. 基于分代的垃圾回收算法
  4. 程序员讨论技术问题时说话都很直接,哪个国家都不例外
  5. 【面试必会】java虚拟机原理
  6. java中打开特定编码的文本_指定编码写入和读取文件内容
  7. pycharm 默认pip安装位置_为什么电脑所有软件默认安装位置都是C盘?
  8. Shortest Prefixes(poj 2001)
  9. Jenkins 之插件 Publish JUint test result reports 的使用
  10. 计算机课程教学调查问卷,计算机基础课程调查问卷
  11. c语言之判断if语句
  12. JS模块化CommonJS、ES6模块化 、AMD、CMD知识总结
  13. 饱食沪深港澳22日-港:星级传统韩菜-梨花园~110207
  14. c语言编写while乘法表,用C语言的while循环,打印九九乘法表,
  15. 01_测试基础知识---微信公众号测试点
  16. AE学习02:时间轴
  17. activity启动模式你所不知道的异常情况
  18. k8s v1.22版本中Ingress配置:no matches for kind “Ingress“ in version “networking.k8s.io/v1beta1“
  19. 诺顿ghost使用教程
  20. P4315 月下“毛景树” (树链剖分)

热门文章

  1. 电缆sa是不是普通计算机电缆,IC-SA IC-MPIA IAC-CA IAC-MA仪表控制计算机电缆
  2. django-生成详细的操作日志
  3. Netty 中的 Channel执行完close之后, 还能进行write吗?
  4. SVM分类器如何输出预测实例的概率值
  5. SQL SERVER 行列转换(1)——聚合函数静态转换
  6. 数据结构课程设计:管道铺设施工的最佳方案代码
  7. Python半双工聊天
  8. Squish 7.0中视频捕获 (含相关网络直播研讨会报名信息)
  9. Windows系统日志分析
  10. uni-app小程序证件拍照