Visual Studio 2015 の natvis 拡張機能に問題があります。私の努力では、マップにアクセスする必要がありTreeItems
ますが、natvis のノードが機能していないようです。私は実際にサンプルコードを使用しています:
<?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>
しかし、マップ <int,int> でこのエラーが発生します。
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 定義が変更された可能性がありますが、何も見つかりませんでした。サンプル コードは機能しないはずですが、機能しない例から作業を開始するのは難しいと思います。