如何在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)
希望这可以帮助
- 如果使用私人访问修改器,是否应该使用冗余?
- dynamic编程 – 最大的方形块
- 用Enumerable.Range与传统for循环的foreach思考
- constexpr和初始化一个静态const void指针reinterpret强制转换,哪个编译器是正确的?
- 如何使C ++ cout不使用科学记数法
- 将void **转换为int – C的二维数组
- 如何将string拆分为C中的2个string
- 为什么很多(旧)程序使用floor(0.5 + input)而不是round(input)?
- DateTime.Parse(“2012-09-30T23:00:00.0000000Z”)总是转换为DateTimeKind.Local