6

我正在寻找支持 STL 调试的 Linux IDE。

问题是使用 Eclipse CDT,如果我在 push_back 之后检查向量:

int main() {
 vector<string> v;
 v.push_back("blah");
 return 0;
}

我得到了一些敌对的东西

{<std::_Vector_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >> = {_M_impl = {<std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {<__gnu_cxx::new_allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {<No data fields>}, <No data fields>}, _M_start = 0x1fee040, _M_finish = 0x1fee048, _M_end_of_storage = 0x1fee048}}, <No data fields>}

而不是像

vector["blah"]

或类似的东西。是否有提供更好的 STL 支持的 Linux 替代 IDE/调试器?

4

5 回答 5

5

QtCreator有用于 Qt 容器、一些 STL 容器和一堆 Qt 类的调试器转储器。它也比 Eclipse 响应更快。

请参阅Qt Creator 调试器转储程序

于 2009-09-03T08:51:11.087 回答
1

只需编写 GDB 脚本即可打印 stl 容器。要打印矢量:

define pvec
    set $vec = ($arg0)
    set $vec_size = $vec->_M_impl->_M_finish - $vec->_M_impl->_M_start
    if ($vec_size != 0)
        set $i = 0
        while ($i < $vec_size)

          printf "Vector Element %d:  ", $i

          p *($vec->_M_impl->_M_start+$i)

          set $i++

        end
    end
end

现在你甚至可以在 python 上编写脚本。检查文档。

我个人使用 cgdb,它是一个非常方便的 curses 调试器。

于 2011-07-06T12:05:16.473 回答
0

这与 IDE 本身无关,但这是您使用的调试器的一个缺点。IDE,尤其是在 Linux 上,只是调试器的前端。我想你正在使用 GDB,它不会比这更好。顺便说一句,在 Linux 上开发时,我使用精心放置的打印语句而不是调试器,而且大多数时候我发现它比使用调试器更好!

于 2009-09-03T09:06:40.783 回答
0

Eclipse 使用 gdb,您可以编写 gdb 脚本,以便它以您想要的方式打印不同的类型。我对自己的类型使用自己的脚本,但 stl 有很多可用的脚本。

现在棘手的部分将是使这项工作顺利进行是 Eclipse,但它可以是一个解决方案。

于 2009-09-03T09:09:35.270 回答
0

如果您想远离 GDB 脚本,您不妨让 Eclipse 转而使用QtCreator,或者如果您不介意为许可证付费,CLion是 IMO 周围最好的 IDE。

于 2018-07-20T13:46:42.160 回答