如何在 Eclipse CDT 中为 C++ STL 对象启用 gdb 漂亮打印?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4985414/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to enable gdb pretty printing for C++ STL objects in Eclipse CDT?
提问by AlejandroVK
I'm trying to add pretty printing for STL objects in eclipse cdt. I tried to follow the steps described here:
我正在尝试为 eclipse cdt 中的 STL 对象添加漂亮的打印。我尝试按照此处描述的步骤操作:
http://sourceware.org/gdb/wiki/STLSupport
http://sourceware.org/gdb/wiki/STLSupport
I checked out the python folder, but I can't seem to get this done...
我查看了 python 文件夹,但似乎无法完成此操作...
I created a gdbinit and selected for my debug configuration, but whenever I try to start debugging I get the following error:
我创建了一个 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)
If I try to execute the contents of gdbinit in a python shell, I get this error:
如果我尝试在 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
It seems that I don't have such module...I don't have a clue about Python so I don't even know what a "module" is in Python....
似乎我没有这样的模块......我对Python一无所知所以我什至不知道Python中的“模块”是什么......
Can somebody help me with this? It is very important for me to be able to see real debug information, or useful to put it that way. Or someway I can debug even from console and get nice output from gdb, cuz if I go print a string for instance I get useless output....
有人可以帮我解决这个问题吗?能够看到真实的调试信息对我来说非常重要,或者这样说很有用。或者我什至可以从控制台调试并从 gdb 获得不错的输出,因为如果我打印一个字符串,例如我得到无用的输出......
Regards, Alex
问候,亚历克斯
回答by Riga
This is the solution that works for me.
这是对我有用的解决方案。
Download ( http://www.gnu.org/software/gdb/download/) and install latest gdb (i.e. with --prefix $HOME). It supports python scripting.
下载(http://www.gnu.org/software/gdb/download/)并安装最新的gdb(即使用--prefix $HOME)。它支持python脚本。
Get python pretty printers by executing
通过执行获得python漂亮的打印机
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
in a directory of your choice (i.e. $(HOME)/distribs/gdb_printers). You will get 'python' subdirectory in the checkout directory.
在您选择的目录中(即 $(HOME)/distribs/gdb_printers)。您将在结帐目录中获得“python”子目录。
Put this in your $(HOME)/.gdbinit file with proper path to pretty printers:
把它放在你的 $(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
This makes pretty printing usable via command-line interface of gdb (>(gdb) p my_std_string
).
这使得通过 gdb ( >(gdb) p my_std_string
) 的命令行界面可以使用漂亮的打印。
Next explains usage while debugging in Eclipse.
接下来解释在 Eclipse 中调试时的用法。
Download ( http://download.eclipse.org/eclipse/downloads/) latest Stream Stable Build or Release of Eclipse (>=3.7 version).
下载 ( http://download.eclipse.org/eclipse/downloads/) 最新的 Stream Stable Build 或 Eclipse 版本(>=3.7 版本)。
Download ( http://download.eclipse.org/tools/cdt/builds/8.0.0/index.htmlfor Eclipse Indigo or http://www.eclipse.org/cdt/downloads.phpfor Eclipse Juno) latest Eclipse C/C++ Development Tooling (Eclipse CDT).
下载(http://download.eclipse.org/tools/cdt/builds/8.0.0/index.htmlfor Eclipse Indigo 或 http://www.eclipse.org/cdt/downloads.phpfor Eclipse Juno)最新的 Eclipse C/C++ 开发工具 (Eclipse CDT)。
Run Eclipse and chose workspace directory where your options will be stored (i.e. $HOME/projects). Click Help->Install New Software... Click Add...->Archive... and choose the CDT build that you've just downloaded. Then you must choose components to install: click CDT Main Features -> C/C++ Development Tools (and possibly other components of your choice). Then proceed with installation and restart Eclipse.
运行 Eclipse 并选择将存储选项的工作区目录(即 $HOME/projects)。单击 Help->Install New Software... 单击 Add...->Archive... 并选择您刚刚下载的 CDT 版本。然后您必须选择要安装的组件:单击 CDT 主要功能 -> C/C++ 开发工具(可能还有您选择的其他组件)。然后继续安装并重新启动 Eclipse。
Specify proper location of gdb and .gdbinit in Eclipse and make sure the Pretty Printing option is enabled:
在 Eclipse 中指定 gdb 和 .gdbinit 的正确位置,并确保启用 Pretty Printing 选项:
Window -> preferences -> C/C++ -> Debug -> GDB
Now you can see STL containers pretty-printed in Variables view while debugging in Eclipse.
现在,您可以在 Eclipse 中调试时在变量视图中看到漂亮的 STL 容器。
Other commands can be used to make gdb output more decent:
可以使用其他命令使 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
UPDATE: Regarding getting it to work for old projects, see point 4) in rustyx answer below.
更新:关于让它为旧项目工作,请参阅下面 rustyx 答案中的第 4) 点。
UPDATE2: ubuntu 12.04 has libstdc++6-4.6-dbg that installs /usr/share/gcc-4.6/python/libstdcxx/ python module for you
UPDATE2: ubuntu 12.04 有 libstdc++6-4.6-dbg 为你安装 /usr/share/gcc-4.6/python/libstdcxx/ python 模块
回答by rustyx
I know this does not answer the original question, but I thought it might be useful for those who debug in Eclipse on Windows / MinGW. The procedure for Windows is similar:
我知道这不能回答最初的问题,但我认为它可能对那些在Windows / MinGW上的 Eclipse 中调试的人有用。Windows 的过程类似:
1) Get Python 2.7.x from http://python.org/download/
1) 从http://python.org/download/获取 Python 2.7.x
2) Create .gdbinit
somewhere containing something like this:
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
3) Configure Eclipse CDT to use C:\MinGW\bin\gdb-python27.exe
as the debugger and your .gdbinit
as the config file.
3) 将 Eclipse CDT 配置C:\MinGW\bin\gdb-python27.exe
为用作调试器并将您.gdbinit
的配置文件用作配置文件。
4) Re-create your debug launch session (delete the old one and create a new one from scratch).
4) 重新创建您的调试启动会话(删除旧会话并从头开始创建一个新会话)。
回答by William Symionow
I would like to expand on the Windows 7 response because some key steps are left out:
我想扩展 Windows 7 的响应,因为省略了一些关键步骤:
This is for MinGW users with Eclipse CDT
这适用于使用 Eclipse CDT 的 MinGW 用户
0) If you don't have python GDB, open a shell/command and use MinGW-get.exe to 'install' Python-enabled GDB e.g.
0)如果你没有 python GDB,打开一个 shell/命令并使用 MinGW-get.exe 来“安装”启用 Python 的 GDB,例如
MinGw-get.exe install gdb-python
1a) Get Python 2.7.x from http://python.org/download/and install
1a) 从http://python.org/download/获取 Python 2.7.x并安装
1b) Make sure PYTHONPATH and PYTHONHOME are set in your environment:
1b) 确保在您的环境中设置了 PYTHONPATH 和 PYTHONHOME:
PYTHONPATH should be C:\Python27\Lib (or similar)
PYTHONHOME should be C:\Python27
1c) Add PYTHONHOME to your PATH
1c) 将 PYTHONHOME 添加到您的 PATH
%PYTHONHOME%;...
2a) Open a text enter, enter the following statements. Notice the 3rd line is pointing to where the python scripts are located. See notes below about this!
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) Save as '.gdbinit' NOTE: Windows explorer will not let you name a file that starts with with a period from explorer. Most text edits (including Notepad) will let you. GDB init files are like 'scripts' of GDB commands that GBD will execute upon loading.
2b) 另存为“.gdbinit” 注意:Windows 资源管理器不允许您命名以资源管理器中的句点开头的文件。大多数文本编辑(包括记事本)都可以。GDB 初始化文件就像 GBD 在加载时将执行的 GDB 命令的“脚本”。
2c) The '.gdbinit' file needs to be in the working directory of GDB (most likely this is your projects root directory but your IDE can tell you.
2c) '.gdbinit' 文件需要在 GDB 的工作目录中(很可能这是你的项目根目录,但你的 IDE 可以告诉你。
3) Open your Eclipse (or other IDE) Preferences dialog. Go to the C++ Debugger sub-menu.
3) 打开 Eclipse(或其他 IDE)首选项对话框。转到 C++ 调试器子菜单。
4) Configure Eclipse to use C:\MinGW\bin\gdb-python27.exe
as the debugger and your .gdbinit
as the config file.
4) 将 Eclipse 配置为C:\MinGW\bin\gdb-python27.exe
用作调试器,并将您.gdbinit
的配置文件用作配置文件。
5a) Re-create all your debug launch configurations (delete the old one and create a new one from scratch).
5a) 重新创建所有调试启动配置(删除旧配置并从头开始创建新配置)。
--OR--
5b) Edit each debug configuration and point it to the new gdb-python.exe AND point it to the.
5b) 编辑每个调试配置并将其指向新的 gdb-python.exe 并将其指向。
If you run into issues:
如果遇到问题:
--Don't forget to change the location to the python directory in the above python code! This directory is created by MinGW, so don't go looking to download the pretty printers, MinGW did it for you in step zero. Just goto your MinGW install director, the share folder, the GCC folder (has version number) and you will find python folder. This location is what should be in python script loaded by GDB.
--别忘了把上面python代码中的位置改成python目录!这个目录是由 MinGW 创建的,所以不要去寻找下载漂亮的打印机,MinGW 在第 0 步为你做了。只需转到您的 MinGW 安装目录、共享文件夹、GCC 文件夹(有版本号),您就会找到 python 文件夹。这个位置应该在 GDB 加载的 python 脚本中。
--Also, the .gdbinit is a PITA, make sure its named correctly and in the working folder of GDB which isn't necessarily where gdb-python.exe is located! Look at your GDB output when loading GDB to see if a) 'python-enabled' appears during load and that the statements in the .gdbinit are appearing.
--此外,.gdbinit 是一个 PITA,请确保其命名正确且位于 GDB 的工作文件夹中,而 GDB 的工作文件夹不一定是 gdb-python.exe 所在的位置!在加载 GDB 时查看您的 GDB 输出,看看是否 a) 'python-enabled' 在加载期间出现,以及 .gdbinit 中的语句是否出现。
--Finally, I had alot of issues with the system variables. If python gives you 'ImportError' then most likely you have not set PYTHONPATH or PYTHONHOME.
--最后,我对系统变量有很多问题。如果 python 给你 'ImportError' 那么你很可能没有设置 PYTHONPATH 或 PYTHONHOME。
--The directory with 'gdb-python27' (e.g. C:\MinGW\bin') should also be on your path and if it is, it makes setting up eclipse a bit nicer because you don't need to put in absolute paths. But still, sometimes the .gbdinit needs an absoulte path. if it works you'll see output from gbd (console->gdb traces) like this on startup of debugger:
--'gdb-python27' 的目录(例如 C:\MinGW\bin')也应该在你的路径上,如果是,它会让 eclipse 的设置更好一些,因为你不需要放入绝对路径. 但是,有时 .gbdinit 需要一个绝对路径。如果它有效,您将在调试器启动时看到 gbd(控制台->gdb 跟踪)的输出,如下所示:
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)
回答by acel
If you follow the accepted answerand UPDATE2 and gdb receives an error like this:
如果您按照接受的答案和 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.
It is because your version of gdb is using Python 3 (confirm with this answer)
这是因为您的 gdb 版本使用的是 Python 3(确认此答案)
A workaround for this problem is explained here
此处解释了此问题的解决方法
Alternatively, follow the instructions to get the source from svn://gcc.gnu.org, which is Python 3 compatible
或者,按照说明从 svn://gcc.gnu.org 获取源代码,它与 Python 3 兼容
回答by Bob Yoplait
to display STL objects in Eclipse CDT, I do this and it works fine:
要在 Eclipse CDT 中显示 STL 对象,我这样做并且它工作正常:
http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF
http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF
(option number 2 in the link that you sent)
(您发送的链接中的选项 2)
Hope this helps
希望这可以帮助