【问题标题】:std::vector visualizer doesn't work properly on std::vector<boost::variant>std::vector 可视化工具在 std::vector<boost::variant> 上无法正常工作
【发布时间】:2009-07-06 15:07:53
【问题描述】:

如果我有std::vector&lt;boost::variant&lt;...&gt;&gt;,VS2008 autoexp.dat 文件中的 Visual Studio std::vector 可视化工具似乎不起作用。它确实适用于我尝试过的其他类型的向量(例如std::vector&lt;int&gt;std::vector&lt;boost::shared_ptr&lt;..&gt;&gt;

这是可视化代码:

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
        ),
        ")"
    )

)
}

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

{_Myfirst= _Mylast= _Myend= }

而应该是向量项的子项是实际的向量成员。就好像 std::vector 可视化工具不存在一样。

我截取了监视窗口的屏幕截图。你可以看到它如何显示std::vector&lt;boost::variant&lt;int, std::string&gt;&gt;错误,然后正确显示接下来的两个向量:Hyperlink to screenshot

有谁知道是什么原因造成的以及如何阻止它发生?

谢谢!

【问题讨论】:

    标签: c++ visual-studio boost debugging


    【解决方案1】:

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

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

    struct abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopq
    {
    };
    
    int main()
    {
        std::vector< abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopqrstuvwxyz012345abcdefghijklmnopq > test2;
    
        test2.resize(10);
    
        return 0;
    }
    

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

    【讨论】:

    • 哦。多么烦人。非常感谢您解开谜团!
    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    相关资源
    最近更新 更多