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