控制Eclipse CDT调试器输出?

时间:2008-11-17 15:20:32

标签: debugging eclipse-cdt

当使用CDT时,我希望std :: string在'variable'调试窗口中显示它包含的字符串。例如,如果它当前持有“history”这个词,我希望在调试器窗口中看到标记为“variables”的 history

我认为有一种通用方法可以深入研究物体,但我不能把手指放在它上面。有没有人知道怎么做?

当从复杂对象输出单个字段时,这对我来说也很有用。

谢谢, 比尔

6 个答案:

答案 0 :(得分:22)

使用eclipse / gdb显示stl容器对我来说也是一个很大的痛苦。

但是现在我刚刚发现启用了python的最新版本的gdb可以帮助解决这个问题。

它遵循我所做的(使用Ubuntu Linux 8.10):

  • 安装gdb版本> = 6.8.50(例如from debian experimental
  • 使用以下内容在项目根目录中创建名为.gdbinit的文件:

    python import gdb.libstdcxx.v6.printers

现在stl容器将漂亮打印

如果你想检查你是否已经启用了python(或者你的新安装是否有效):

  • 从控制台启动gdb
  • 在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的响应,因为省略了一些关键步骤:

这适用于使用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)打开文本输入,输入以下语句。注意第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命令行:

  1. Debug 窗口中,单击 gdb 。 它就在堆栈轨迹下方。
  2. 控制台窗口中,使用GDB up命令转到所需的堆栈框架
  3. 再次在 Console 窗口中,使用print命令显示 std::string变量:

    p mystring

  4. 但这很麻烦。

    我注意到的一点是,当我将鼠标悬停在变量上时,实际上会显示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并且它在那里工作得更好吗?