gdb调试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。下载源码包通过编译安装。

编译方式:

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

make

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

5.命令行测试

源码try.cpp:

#include

using namespace std;

int main()

{

vector vec;

vec.push_back(1);

vec.push_back(2);

vec.push_back(3);

return 0;

}

用g++ -g -o try try.cpp编译,并用gdb try调试,执行代码,并用p vec打印变量,得出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可以正常显示了。

3921679392604bba1a7d3a1a527d2907.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值