std :: vector visualizer在std :: vector <boost :: variant>上无法正常工作

Vic*_*ter 0 c++ debugging boost visual-studio

如果我有一个,VS2008 autoexp.dat文件中的visual studio std :: vector visualizer似乎不起作用std::vector<boost::variant<...>>.它不会对其他类型的载体工作,我曾尝试(例如std::vector<int>,std::vector<boost::shared_ptr<..>>)

这是可视化代码:

std::vector<*>{
children
(
    #array
    (
        expr :      ($e._Myfirst)[$i],
        size :      $e._Mylast-$e._Myfirst
    )
)
preview
(
    #(
        "[", $e._Mylast - $e._Myfirst , "](",
        #array
        (
            expr :  ($e._Myfirst)[$i],
            size :  $e._Mylast-$e._Myfirst
        ),
        ")"
    )

)
}
Run Code Online (Sandbox Code Playgroud)

预览显示,而不是显示项目数和项目值

{_Myfirst= _Mylast= _Myend= }
Run Code Online (Sandbox Code Playgroud)

而应该是矢量项的子项是实际的矢量成员.就好像std :: vector visualizer不存在一样.

我拍了一下观察窗的截图.您可以看到它显示std::vector<boost::variant<int, std::string>>错误的方式,然后正确显示下两个向量:超链接到屏幕截图

有谁知道是什么导致这种情况以及如何阻止它发生?

谢谢!

e.t*_*deu 5

它似乎是与您的类型名称大小相关的错误... boost :: variant生成具有很长名称的类型.

我做了一些测试,似乎限制是一个名称大小为497个字符的结构.下面的代码重现错误...取结构名称的最后一个字符,它工作正常!

struct abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopq
{
};

int main()
{
    std::vector< abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopq > test2;

    test2.resize(10);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请随时在http://connect.microsoft.com/上报告错误