在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配置的選項是以後生效,以前配置的選項仍是老的。修改的跟以前配置同樣就能夠啦。

相關文章
相關標籤/搜索