首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Eclipse中为C++ STL对象启用gdb漂亮打印?

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

Stack Overflow用户
提问于 2011-02-13 16:42:05
回答 5查看 48.2K关注 0票数 42

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

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

我检查了python文件夹,但我似乎做不到.

我创建了一个gdbinit,并为我的调试配置选择了一个gdbinit,但是每当我尝试开始调试时,我都会得到以下错误:

代码语言:javascript
复制
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中执行gdbinit的内容,就会得到以下错误:

代码语言:javascript
复制
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中的“模块”是什么.

有人能帮我吗?对我来说,能够看到真正的调试信息,或者这样说是很有用的,这一点非常重要。或者通过某种方式,我甚至可以从控制台调试并从gdb获得很好的输出,因为如果我打印一个字符串(例如,我得到无用的输出).

你好,亚历克斯

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-19 08:07:01

这是对我有效的解决方案。

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

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

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

在您选择的目录中(即$(HOME)/distribs/gdb_printers)。您将在签出目录中获得“python”子目录。

将其放入$(HOME)/.gdbinit文件中,并提供正确的打印机路径:

代码语言:javascript
复制
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中调试时的用法。

下载( http://download.eclipse.org/eclipse/downloads/)最新的流稳定构建或发布的Eclipse (>=3.7版本)。

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

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

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

代码语言:javascript
复制
Window -> preferences -> C/C++ -> Debug -> GDB

现在,您可以看到在Eclipse中调试时,STL容器很好地打印在变量视图中。

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

代码语言:javascript
复制
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: Ubuntu12.04有libstdc++6-4.6DBG,它为您安装/usr/share/gcc-4.6/ python /libstdcxx/ python模块。

票数 67
EN

Stack Overflow用户

发布于 2012-03-02 17:17:43

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

1)从http://python.org/download/获取Python2.7.x

2)创建包含如下内容的.gdbinit

代码语言:javascript
复制
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)将Eclipse配置为使用C:\MinGW\bin\gdb-python27.exe作为调试器,使用.gdbinit作为配置文件。

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

票数 10
EN

Stack Overflow用户

发布于 2013-01-10 19:02:13

我想扩展Windows 7的响应,因为忽略了一些关键步骤:

这是针对使用Eclipse的MinGW用户的

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

代码语言:javascript
复制
   MinGw-get.exe install gdb-python

( 1a)从http://python.org/download/获取Python2.7.x并安装

确保PYTHONPATH和PYTHONHOME设置在您的环境中:

代码语言:javascript
复制
 PYTHONPATH should be C:\Python27\Lib   (or similar)
 PYTHONHOME should be C:\Python27

1c)在你的道路上增加多个项目

代码语言:javascript
复制
 %PYTHONHOME%;...

2a)打开文本输入,输入以下语句。注意,第3行指向python脚本所在的位置。请看下面关于这个的笔记!

代码语言:javascript
复制
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 init文件就像GDB命令的“脚本”,GBD将在加载时执行这些命令。

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

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

4)将Eclipse配置为使用C:\MinGW\bin\gdb-python27.exe作为调试器,使用.gdbinit作为配置文件。

( 5a)重新创建所有的调试启动配置(删除旧的,从头创建一个新的)。

代码语言:javascript
复制
--OR--

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

如果你遇到问题:

--别忘了在上面的python代码中将位置更改为python目录!这个目录是由MinGW创建的,所以不要去下载漂亮的打印机,MinGW是在步骤0中为您创建的。只需转到您的MinGW安装主管,共享文件夹,GCC文件夹(有版本号),您将找到python文件夹。这个位置应该是GDB加载的python脚本中的位置。

-而且,.gdbinit是一个PITA,确保它的名称正确,并且位于GDB的工作文件夹中,这不一定是gdb-python.exe所在的位置!在加载GDB时查看GDB输出,查看加载期间是否出现了“启用python”,以及是否出现了.gdbinit中的语句。

-最后,我对系统变量有很多问题。如果python给出了“ImportError”,那么很可能您还没有设置PYTHONPATH或PYTHONHOME。

--包含“gdb-python27 27”的目录(例如C:\MinGW\bin)也应该在您的路径上,如果是的话,它会使eclipse的设置更好一些,因为您不需要放置绝对路径。但尽管如此,.gbdinit有时还是需要一条清澈的道路。如果它有效,您将在调试器启动时看到来自gbd (控制台->gdb跟踪)的输出:

代码语言:javascript
复制
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) 
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4985414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档