C++ 如何为C++;EclipseCDT中的STL对象?

C++ 如何为C++;EclipseCDT中的STL对象?,c++,eclipse,gdb,eclipse-cdt,gdb-python,C++,Eclipse,Gdb,Eclipse Cdt,Gdb Python,我试图在EclipseCDT中为STL对象添加漂亮的打印。我尝试按照此处描述的步骤进行操作: 我签出了python文件夹,但似乎无法完成此操作 我创建了一个gdbinit,并选择它作为调试配置,但每当我尝试开始调试时,都会出现以下错误: Error while executing Python code. !STACK 0 java.lang.Exception: /home/lizardking/workspace/eu.sofia.kpi.cpp.x86.testapp/.gdbinit:

我试图在EclipseCDT中为STL对象添加漂亮的打印。我尝试按照此处描述的步骤进行操作:

我签出了python文件夹,但似乎无法完成此操作

我创建了一个gdbinit,并选择它作为调试配置,但每当我尝试开始调试时,都会出现以下错误:

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
Python2.6.6(r266:8429220010年9月15日,15:52:39) [GCC 4.4.5]关于linux2 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 导入系统 sys.path.insert(0,“/home/Documents/python”) 从libstdcxx.v6.printers导入寄存器\u libstdcxx\u打印机 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ImportError:没有名为libstdcxx.v6.0的模块 似乎我没有这样的模块……我对Python一无所知,所以我甚至不知道Python中的“模块”是什么

有人能帮我吗?对我来说,能够看到真实的调试信息是非常重要的,或者这样说很有用。或者,我甚至可以从控制台进行调试,从gdb获得良好的输出,因为如果我去打印字符串,例如,我会得到无用的输出

问候,,
Alex

要在Eclipse CDT中显示STL对象,我这样做,效果很好:

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


希望这对我有帮助这是一个适合我的解决方案

下载()并安装最新的gdb(即带有--prefix$HOME)。它支持python脚本

通过执行

svn公司svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python 在您选择的目录中(即$(HOME)/distribs/gdb_打印机)。您将在签出目录中获得“python”子目录

将此文件放在$(HOME)/.gdbinit文件中,并具有到漂亮打印机的正确路径:

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中调试时的用法。 下载()最新的流稳定版本或Eclipse发行版(>=3.7版本)

下载(对于EclipseIndigo或EclipseJuno)最新的EclipseC/C++开发工具(EclipseCDT)

运行Eclipse并选择存储选项的工作区目录(即$HOME/projects)。单击帮助->安装新软件。。。单击添加…->存档。。。然后选择刚刚下载的CDT构建。然后您必须选择要安装的组件:单击CDT Main Features->C/C++开发工具(可能还有您选择的其他组件)。然后继续安装并重新启动Eclipse

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

Window -> preferences -> C/C++ -> Debug -> GDB
现在,您可以看到在Eclipse中调试时,STL容器在Variables视图中打印得非常漂亮

其他命令可用于使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点


更新2:Ubuntu12.04的libstdc++6-4.6-dbg为您安装了/usr/share/gcc-4.6/python/libstdcxx/python模块

我知道这并没有回答最初的问题,但我认为它可能对那些在Windows/MinGW上使用Eclipse进行调试的人有用。Windows的过程与此类似:

1) 从中获取Python 2.7.x

2) 创建
.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
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.
3) 将Eclipse CDT配置为使用
C:\MinGW\bin\gdb-python27.exe
作为调试器,使用
.gdbinit
作为配置文件


4) 重新创建调试启动会话(删除旧会话并从头开始创建新会话)。

我想详细介绍Windows 7响应,因为遗漏了一些关键步骤:

这是为使用EclipseCDT的MinGW用户提供的 0)如果没有python GDB,请打开一个shell/命令并使用MinGW-get.exe“安装” 启用Python的GDB,例如

   MinGw-get.exe install gdb-python
1a)从获取Python 2.7.x并安装

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

 PYTHONPATH should be C:\Python27\Lib   (or similar)
 PYTHONHOME should be C:\Python27
1c)将PYTHONHOME添加到您的路径中

 %PYTHONHOME%;...
2a)打开文本输入,输入以下语句。注意,第三行是 指向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资源管理器不允许您命名以开头的文件 有一个时期从探险家。大多数文本编辑(包括记事本)将允许您进行编辑。GDB初始化 文件类似于GBD将在加载时执行的GDB命令的“脚本”

2c)“.gdbinit”文件需要位于GDB的工作目录中(很可能是 您的项目根目录,但您的IDE可以告诉您

3) 打开Eclipse(或其他IDE)首选项对话框。转到C++调试器子菜单。< /P> 4) 将Eclipse配置为使用
C:\MinGW\bin\gdb-python27.exe
作为调试器,使用
.gdbinit
作为配置文件

5a)重新创建所有调试启动配置(删除旧配置并从头创建新配置)

5b)编辑每个调试配置并将其指向新的gdb-python.exe并将其指向

如果遇到问题: --不要忘记在上面的python代码中将位置更改为python目录! 这个目录是由MinGW创建的,所以不要去下载漂亮的打印机,MinGW 在第0步为你做的。只需转到您的MinGW安装控制器,共享文件夹, GCC文件夹(有版本号)和python文件夹。这个位置是什么 应该是GDB加载的python脚本

--此外,.gdbinit是一个PITA,请确保其名称正确,并且位于GDB的工作文件夹中 这不一定是gdb-python.exe所在的位置!加载GDB时,请查看GDB输出,以查看在加载期间是否出现“python已启用”以及.g中的语句
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) 
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.