在eclipse用gdb调试stl容器配置

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

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

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

len = header.dereference ()['_M_length']
if len>100:
    len=100 #此处值可作修改(中文字要去掉,此处只是说明)
if hasattr(ptr, "lazy_string"): eclipse

3.在你的用户路径下建立.gdbinit,我用的是root用户,因此建立的文件为/root/.gdbinit,里边内容为 svn

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,则跳过此步。 spa

我用的是centos5.5,gdb是7.0版的,彷佛不支持,因此下载了最新的7.5,须要安装python2.6版本,2.4不能用,其它版本没有尝试。我用的是2.6.5。下载源码包经过编译安装。 插件

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

编译方式: debug

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

我直接将编译出来的gdb替换了原来的/usr/bin/gdb,你们能够把原来的gdb留个备份。

5.命令行测试

源码try.cpp:

#include <vector>
using namespace std;

int main()
{
vector<int> 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能够正常显示了。

这里还须要注意一点,以前配置的调试选项也须要修改,由于preferences配置的选项是以后生效,以前配置的选项仍是老的。修改的跟以前配置同样就能够啦。

相关文章
相关标签/搜索