在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配置的选项是之后生效,之前配置的选项还是老的。修改的跟之前配置一样就可以啦。