当使用CDT时,我希望std :: string在'variable'调试窗口中显示它包含的字符串。例如,如果它当前持有“history”这个词,我希望在调试器窗口中看到标记为“variables”的 history 。
我认为有一种通用方法可以深入研究物体,但我不能把手指放在它上面。有没有人知道怎么做?
当从复杂对象输出单个字段时,这对我来说也很有用。
谢谢, 比尔
答案 0 :(得分:22)
使用eclipse / gdb显示stl容器对我来说也是一个很大的痛苦。
但是现在我刚刚发现启用了python的最新版本的gdb可以帮助解决这个问题。
它遵循我所做的(使用Ubuntu Linux 8.10):
使用以下内容在项目根目录中创建名为.gdbinit的文件:
python import gdb.libstdcxx.v6.printers
现在stl容器将漂亮打印。
如果你想检查你是否已经启用了python(或者你的新安装是否有效):
在gdb提示符下执行以下
(gdb)python print'Python enabled GDB正在运行!'
如果上面的命令产生了我们期望的结果,那么它正在发挥作用。
有关详细信息,请查看this blog。
答案 1 :(得分:1)
请注意,您不想要一种向下钻取物体的一般方法;你想漂亮打印STL容器。
我认为CDT将此委托给调试器后端;即由您的调试器(gdb,也许是?)来告知CDT变量的值以及如何扩展它。
编辑:我认为CDT附带的GDB后端不支持“智能”显示STL容器。如果您真的对此感兴趣,我建议您通过cdt-dev@eclipse.org与CDT开发团队联系。
更新/编辑:请参阅下面的其他回复,了解如何在CDT中启用漂亮的打印机。
答案 2 :(得分:1)
Windows 7
获得漂亮的打印机:
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
设置eclipse: C / C ++ Debug Gdb:
C:\MinGW\bin\gdb-python27.exe C:\MinGW\bin\.gdbinit
答案 3 :(得分:1)
我想扩展Windows 7的响应,因为省略了一些关键步骤:
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)打开文本输入,输入以下语句。注意第3行是 指向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 ++ Debugger子菜单。
4)配置Eclipse以使用C:\MinGW\bin\gdb-python27.exe
作为调试器,并使用.gdbinit
作为配置文件。
5a)重新创建所有调试启动配置(删除旧配置并从头开始创建新配置)。
--OR--
5b)编辑每个调试配置并将其指向新的gdb-python.exe并将其指向。
- 不要忘记在上面的python代码中将位置更改为python目录! 这个目录是由MinGW创建的,所以不要去下载漂亮的打印机MinGW 在第0步为你做了。只需转到你的MinGW安装导演,共享文件夹, GCC文件夹(有版本号),你会发现python文件夹。这个位置是什么 应该是由GDB加载的python脚本。
- 另外,.gdbinit是一个PITA,确保它的名称正确并且在GDB的工作文件夹中 这不一定是gdb-python.exe所在的位置!在加载GDB时查看您的GDB输出,看看是否a)'load-enabled'在加载期间出现,并且.gdbinit中的语句出现。
- 最后,我对系统变量有很多问题。如果python给你'ImportError',那么你很可能没有设置PYTHONPATH或PYTHONHOME。
- 带有'gdb-python27'的目录(例如C:\ MinGW \ bin')也应该在你的路径上,如果是,它会使eclipse设置得更好,因为你不需要放在绝对路径中。但是,有时候.gbdinit需要一条绝对的道路。如果它工作,你会在启动调试器时看到gbd(console-> gdb trace)的输出:
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)
答案 4 :(得分:0)
我找到的唯一方法是使用GDB命令行:
up
命令转到所需的堆栈框架再次在 Console 窗口中,使用print
命令显示
std::string
变量:
p mystring
但这很麻烦。
我注意到的一点是,当我将鼠标悬停在变量上时,实际上会显示std :: string的字段,但它会被截断,所以我看不到最有趣的部分:字符串值。也许有办法增加显示值的最大长度。
答案 5 :(得分:0)
billcoke你最好的方法是使用一些gdb宏,你可以在gdb控制台上输入,可以在eclipse的Console / Debugger窗口中打开。你可以在这里找到它们: http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.01.txt
它不会自动悬停,但你必须键入哪个是累人....但即使在2009年eclipse CDT还没有成功为我们带来一些不错的调试功能,所以这是你最好的镜头。 / p>
到RPSENG: 谢谢你的提示!它工作得很好!不幸的是,似乎我的eclipse(Ganymede)变得如此困惑,以至于它不再发现我自己创建的类的实例及其继承的指针类型,因此不再可能踩到那些指针的成员变量。你在使用CDT 6.0并且它在那里工作得更好吗?