【问题标题】:Linux IDE with proper support for STL debugging适当支持 STL 调试的 Linux IDE
【发布时间】:2018-07-20 21:46:42
【问题描述】:

我正在寻找支持 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"]

或类似的东西。 是否有替代的 IDE/Debugger for linux 可以提供更好的 STL 支持?

【问题讨论】:

    标签: c++ linux debugging stl eclipse-cdt


    【解决方案1】:

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

    Qt Creator debugger dumpers

    【讨论】:

    • 有意思,下载看看。
    • 使用 QTC 1.2.1 和上面的代码(没有任何 QT 组件),我仍然得到经典的蹩脚矢量显示。
    • 有可能是翻斗车没有建好。转到工具 > 选项 > Qt > Qt 版本并选择您的 Qt 版本。查看调试助手是否被标记为构建(绿色复选标记),如果没有尝试重新构建它。如果一切正常,在运行 GDB 时,您会在调试器信息栏上收到一条消息“X debugger helpers loaded”。
    • 调试助手确实没有构建,我构建成功但我仍然没有让它工作。你的意思是当我从命令行运行 GDB 时,我应该得到“加载 X 调试器助手”的消息?
    • 对不起:在你按下 F5 开始调试并且调试器在断点处停止(或者你做一个中断)后,调试器视图将有一个灰色的状态栏,带有开始/停止/等按钮。如果能够加载调试帮助程序,该栏应显示“找到 X 自定义转储程序”。确保您已从工具 > 选项 > 调试助手打开它们,并且您正在运行调试版本。
    【解决方案2】:

    只需编写 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调试器。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 我知道一些脚本可以改进 gdb 对 stl 的支持,但我正在寻求完整的解决方案。正如你所说 - 这些脚本不能很好地与任何 IDE 集成。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多