我在使用visual studio 2015的natvis扩展时遇到了麻烦。
在我的努力中,我需要访问一个地图,但natvis的TreeItems
节点似乎对我不起作用。我实际上正在使用示例代码:
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="std::map<*>">
<DisplayString>{{size = {_Mysize}}}</DisplayString>
<Expand>
<Item Name="[size]">_Mysize</Item>
<Item Name="[comp]">comp</Item>
<TreeItems>
<Size>_Mysize</Size>
<HeadPointer>_Myhead->_Parent</HeadPointer>
<LeftPointer>_Left</LeftPointer>
<RightPointer>_Right</RightPointer>
<ValueNode Condition="!((bool)_Isnil)">_Myval</ValueNode>
</TreeItems>
</Expand>
</Type>
</AutoVisualizer>
但是我在地图上得到了这个错误&lt; int,int&gt;:
Error: Function std::_Tree_comp_alloc<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const ,int> >,0> >::_Mysize has no address, possibly due to compiler optimizations.
Error while evaluating '_Mysize' in the context of type 'Program.exe!std::map<int,int,std::less<int>,std::allocator<std::pair<int const ,int> > >'.
我正在调试模式下构建并且我进行了双重检查,禁用了优化(\ Od)
也许msvc2015的natvis定义已经改变,但我找不到任何东西。 也许示例代码不应该起作用,但我发现很难从一个不起作用的例子开始。
答案 0 :(得分:1)
我猜std :: map的实现已经改变,natvis示例不是最新的。
以下内容适用于Visual Studio 2017:
<Type Name="std::map<*>">
<DisplayString>{{size = {_Mypair._Myval2._Myval2._Mysize}}}</DisplayString>
<Expand>
<Item Name="[size]">_Mypair._Myval2._Myval2._Mysize</Item>
<Item Name="[comp]">_Mypair</Item>
<Item Name="[first element]">_Mypair._Myval2._Myval2._Myhead</Item>
<TreeItems>
<Size>_Mypair._Myval2._Myval2._Mysize</Size>
<HeadPointer>_Mypair._Myval2._Myval2._Myhead->_Parent</HeadPointer>
<LeftPointer>_Left</LeftPointer>
<RightPointer>_Right</RightPointer>
<ValueNode Condition="!((bool)_Isnil)">_Myval</ValueNode>
</TreeItems>
</Expand>
</Type>