问题
使用VS2015调试项目时发现,无法查看stl里string,vector等容器里面的值了。如图所示:
显然这是不正常的,因为VS官方文档里的debugger是这样的
正常情况的debugger是这样的
问题产生的原因
看了很多博客除去VS设置的原因,最大的可能就是跟C:\Program Files (x86)\Microsoft Visual Studio14.0\Common7\Packages\Debugger\Visualizers、stl.nativs 文件有关啦。
vs在安装时,STL中的类都有默认的显示方案,大概就是上面这张正常debugging图中的效果。既然是默认效果,那为什么我的vs还会有显示问题?其实这是vs 社区版update3的一个bug。bug产生的原因如下:.natvis文件时XML文件,所以正常是需要加上验证的,这个验证文件在C:\Program Files (x86)\Microsoft Visual Studio 14.0\Xml\Schemas\1033\natvis.xsd。但是vs2015社区版update3的这个文件不知道为什么使用的是vs2015RTM版本的xsd文件。导致,vs默认的stl.natvis文件中的一些定义不无通过验证,相应的内容就无法生效,在vs看来相应的内容就只能用raw_data的形式显示。这个问题会在下个版本中解决,目前只能等。
解决方法
省时省力,点击下面链接,然后在你的项目下添加一个新建项,将链接文件内容复制进去。或者直接替换stl.natvis原文件
https://download.csdn.net/download/Hugoui/35073547
大家也可以自己尝试去确认bug的原因,
在vs中可以设置以原始数据的形式查看。“工具”->“选项”->“调试”->“常规”下可以设置“在变量窗口中显示对象的原始数据”,如果希望.natvis生效,需要把这一项取消。然后在“工具”->“选项”->“调试”->“输出窗口” 中的Natvis诊断消息(仅限c++)调为“详细”。就可以看到.natvis文件的报错信息。
在查看STL(以vector为例)对象时,可以查看output窗口,如果.natvis文件解析异常,会报错。在修改了.natvis文件后可以在watch窗口中执行.natvisreload命令重新加在.natvis文件(直接Ctrl+s 好像也行)。
关于创建自定义debugger视图
可以参考官方文档:链接: link.
关于stl.natvis文件,如果需要修改stl.natvis,请注意vs使用的stl版本,不同版本stl对容器元素的声明会不一样。