zoukankan      html  css  js  c++  java
  • eclipse中gdb调试输出stl容器的内容

    在eclipse中安装cdt插件写c++代码时常用到gdb调试
    但是对于vector,map等等stl中内容,调试时只能显示开始和结束时的地址信息,非常不友好。

    研究了老一阵子,终于配置成功了,下边介绍下配置细节,以留大家参考。

    1.用svn下载svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
    2.官网说这个printer有个bug。打开之前检出的文件夹,在python/libstdcxx/v6下找到printers.py并打开, 找到第614行,在之后加入如下红色代码

    len = header.dereference ()['_M_length']
    if len>100:
        len=100 #此处值可做修改
    if hasattr(ptr, "lazy_string"):

    3.在你的用户路径下创建.gdbinit,我用的是root用户,所以创建的文件为/root/.gdbinit,里边内容为

    python
    import sys
    sys.path.insert(0, '/root/python')
    from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None)
    end
    4.下载gdb

    如果此时用gdb调试能够正常显示stl,则跳过此步。

    我用的是centos5.5,gdb是7.0版的,似乎不支持,所以下载了最新的7.5,需要安装python2.6版本,2.4不能用,其它版本没有尝试。我用的是2.6.5。下载源码包通过编译安装。

    dgb下载路径http://mirror.bjtu.edu.cn/gnu/gdb/ 。

    编译方式:

    LDFLAGS=-L/usr/lib ./configure --with-python
    make

    我直接将编译出来的gdb替换了原来的/usr/bin/gdb,大家可以把原来的gdb留个备份。

    5.命令行测试

    源码:

    #include <vector>
    using namespace std;

    int main()
    {
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    return 0;
    }

    用gdb调试得出vec结果为:

    $1 = std::vector of length 3, capacity 4 = {1, 2, 3}

    6.配置eclipse

    官方给出的是在Window->preferences->C/C++->Debug->GDB中进行修改。刚开始我的环境中没有,后来发现是因为eclipse之前没有使用过调试功能,先将代码进行一次调试。之后再去看GDB选项有了。

    这里需要配置的只有一项,就是GDB command file,我配置的是/root/.gdbinit,可根据自己实际情况填写。

    另外如果没有替换原有的gdb,则上方的GDB debugger也需要修改为编译好的gdb路径。

    再次运行eclipse调试,stl可以正常显示了。

    这里还需要注意一点,之前配置的调试选项也需要修改,因为preferences配置的选项是之后生效,之前配置的选项还是老的。修改的跟之前配置一样就可以啦。

  • 相关阅读:
    hdu 5224 Tom and paper 水题
    2015 UESTC 搜索专题N题 韩爷的梦 hash
    2015 UESTC 搜索专题M题 Palindromic String 马拉车算法
    2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp
    2015 UESTC 搜索专题J题 全都是秋实大哥 kmp
    2015 UESTC 搜索专题F题 Eight Puzzle 爆搜
    2015 UESTC 搜索专题E题 吴队长征婚 爆搜
    2015 UESTC 搜索专题D题 基爷的中位数 二分
    2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS
    2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索
  • 原文地址:https://www.cnblogs.com/osyun/p/2849902.html
Copyright © 2011-2022 走看看