在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配置的选项是以后生效,以前配置的选项仍是老的。修改的跟以前配置同样就能够啦。