如何在Eclipse CDT中为C ++ STL对象启用gdb漂亮打印?

我试图在eclipse cdt中为STL对象添加漂亮的打印。 我试图按照这里描述的步骤:

http://sourceware.org/gdb/wiki/STLSupport

我检查了python文件夹,但我似乎无法完成这项工作…

我创build了一个gdbinit,并select了我的debuggingconfiguration,但每当我尝试开始debugging,我得到以下错误:

Error while executing Python code. !STACK 0 java.lang.Exception: /home/lizardking/workspace/eu.sofia.kpi.cpp.x86.testapp/.gdbinit:6: Error in sourced command file: Error while executing Python code. at org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.processMIOutput(AbstractMIControl.java:824) at org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.run(AbstractMIControl.java:662) 

如果我尝试在python shell中执行gdbinit的内容,我得到这个错误:

 Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. import sys sys.path.insert(0, '/home/Documents/python') from libstdcxx.v6.printers import register_libstdcxx_printers Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named libstdcxx.v6.printers 

似乎我没有这样的模块…我没有关于Python的线索,所以我甚至不知道在Python中有什么“模块”。

有人可以帮我吗? 能够看到真实的debugging信息对我来说是非常重要的,或者是有用的。 或者,我甚至可以debugging,甚至从控制台,并从gdb得到不错的输出,因为如果我去打印string,例如我得到无用的输出….

问候,亚历克斯

这是适合我的解决scheme。

下载( http://www.gnu.org/software/gdb/download/ )并安装最新的gdb(即使用–prefix $ HOME)。 它支持python脚本。

通过执行获得python漂亮的打印机

svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

在你select的目录中(例如$(HOME)/ distribs / gdb_printers)。 您将在结帐目录中获得“python”子目录。

把它放在你的$(HOME)/ .gdbinit文件中,find漂亮打印机的适当path:

 python import sys sys.path.insert(0, '/home/YOUR_NAME_HERE/distribs/gdb_printers/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end 

这使得漂亮的打印可以通过gdb的命令行界面( >(gdb) p my_std_string )使用。

接下来在Eclipse中进行debugging时解释用法。

下载( http://download.eclipse.org/eclipse/downloads/)Eclipse最新的Stream Stable Build或Release(> = 3.7版本)。

下载(Eclipse Indigo的http://download.eclipse.org/tools/cdt/builds/8.0.0/index.html或Eclipse Juno的http://www.eclipse.org/cdt/downloads.php )最新的Eclipse C / C ++开发工具(Eclipse CDT)。

运行Eclipse并select工作空间目录,在其中存储选项(即$ HOME / projects)。 点击帮助 – >安装新软件…点击添加…->存档…并select您刚下载的CDT版本。 然后,您必须select要安装的组件:单击CDT主要function – > C / C ++开发工具(可能还有您select的其他组件)。 然后继续安装并重新启动Eclipse。

在Eclipse中指定gdb和.gdbinit的正确位置,并确保启用Pretty打印选项:

 Window -> preferences -> C/C++ -> Debug -> GDB 

现在,您可以在Eclipse中debugging时在“variables”视图中查看STL容器。

其他命令可以用来使gdb输出更体面:

 set print pretty on set print object on set print static-members on set print vtbl on set print demangle on set demangle-style gnu-v3 set print sevenbit-strings off 

更新:关于让它为旧项目工作,请参阅下面的rustyx答案中的点4)。

UPDATE2:ubuntu 12.04有libstdc ++ 6-4.6-dbg,为你安装/usr/share/gcc-4.6/python/libstdcxx/ python模块

我知道这并不能回答原来的问题,但是我认为这对那些在Windows / MinGW的 Eclipse中进行debugging的人来说可能是有用的。 Windows的程序类似:

1)从http://python.org/download/获取Python 2.7.x

2)在包含如下.gdbinit地方创build.gdbinit

 python import sys sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end 

3)configurationEclipse CDT,使用C:\MinGW\bin\gdb-python27.exe .gdbinit作为debugging器,使用.gdbinit作为configuration文件。

4)重新创build您的debugging启动会话(删除旧的,从头创build一个新的)。

我想扩大在Windows 7的响应,因为一些关键的步骤被排除在外:

这是用于Eclipse CDT的MinGW用户

0)如果你没有python GDB,打开一个shell /命令,并使用MinGW-get.exe来“安装”启用Python的GDB,例如

  MinGw-get.exe install gdb-python 

1a)从http://python.org/download/获取Python 2.7.x并安装

1b)确保您的环境中设置了PYTHONPATH和PYTHONHOME:

  PYTHONPATH should be C:\Python27\Lib (or similar) PYTHONHOME should be C:\Python27 

1c)将PYTHONHOME添加到PATH中

  %PYTHONHOME%;... 

2a)打开一个文本input,input以下语句。 注意第三行指向python脚本的位置。 关于这个请看下面的注释!

 python import sys sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end 

2b)保存为“.gdbinit”注意:Windows资源pipe理器不会让你命名一个以explorer为开头的文件。 大多数文本编辑(包括记事本)会让你。 GDB init文件就像GBD在加载时执行的GDB命令的“脚本”一样。

2c)'.gdbinit'文件需要在GDB的工作目录下(很可能这是你的项目根目录,但是你的IDE可以告诉你。

3)打开您的Eclipse(或其他IDE)首选项对话框。 转到C ++debugging器子菜单。

4)将Eclipseconfiguration为使用C:\MinGW\bin\gdb-python27.exe .gdbinit作为debugging器,使用.gdbinit作为configuration文件。

5a)重新创build所有的debugging启动configuration(删除旧的,从头创build一个新的)。

 --OR-- 

5b)编辑每个debuggingconfiguration,并将其指向新的gdb-python.exe并将其指向。

如果遇到问题:

– 不要忘了把位置改成上面的python代码中的python目录! 这个目录是由MinGW创build的,所以不要去下载漂亮的打印机,MinGW在第零步为你做。 刚刚转到你的MinGW安装目录,共享文件夹,GCC文件夹(有版本号),你会发现python文件夹。 这个位置是应该在GDB加载的python脚本中。

.gdbinit是一个PITA,请确保它正确的命名,并在GDB的工作文件夹,这不一定是gdb-python.exe所在的位置! 在加载GDB时查看你的GDB输出,看看在加载过程中是否出现'python-enabled',并且.gdbinit中的语句出现。

最后,我对系统variables有很多问题。 如果python给你'ImportError',那么很有可能你没有设置PYTHONPATH或者PYTHONHOME。

– 'gdb-python27'(例如C:\ MinGW \ bin')的目录也应该在你的path上,如果是这样的话,它会使eclipse设置更好一些,因为你不需要放置绝对path。 但是,有时.gbdinit需要一个绝对的path。 如果它工作,你会看到gbd(console-> gdb跟踪)的输出,像debugging器启动时一样:

 835,059 4^done 835,059 (gdb) 835,059 5-enable-pretty-printing 835,069 5^done .... 835,129 12^done 835,129 (gdb) 835,129 13source C:\MinGW\bin\.gdbinit 835,139 &"source C:\\MinGW\\bin\\.gdbinit\n" 835,142 13^done 835,142 (gdb) 

如果你按照接受的答案和UPDATE2和GDB收到这样的错误:

 Traceback (most recent call last): File "<string>", line 3, in <module> File "/usr/share/gcc-4.8/python/libstdcxx/v6/printers.py", line 54 raise ValueError, "Cannot find type %s::%s" % (str(orig), name) ^ SyntaxError: invalid syntax /home/[you]/.gdbinit:6: Error in sourced command file: Error while executing Python code. 

这是因为你的gdb版本正在使用Python 3(用这个答案来确认)

解决这个问题的方法在这里解释

或者,按照说明从svn://gcc.gnu.org(Python 3兼容)获取源代码

在Eclipse CDT中显示STL对象,我这样做,它工作正常:

http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

(您发送的链接中的选项号码2)

希望这可以帮助