【发布时间】:2015-06-25 22:39:37
【问题描述】:
在 gdb 中启动程序时出现此错误:
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Traceback (most recent call last):
File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'
Google 发现了这个错误报告:http://osdir.com/ml/debian-gcc/2014-02/msg00061.html
此错误报告列表在 gdb 提示符下使用命令 python print sys.path。但是,当我尝试在 gdb 提示符下使用任何 python 时,会发生这种情况:
(gdb) python print sys.path
File "<string>", line 1
print sys.path
^
SyntaxError: invalid syntax
Error while executing Python code.
(gdb) python print "Hello"
File "<string>", line 1
print "HellO"
^
SyntaxError: invalid syntax
Error while executing Python code.
我使用的是 Ubuntu 14.04 LTS,相关版本信息:
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
$ gdb --version
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
$ python --version
Python 2.7.6
显然,我的设置中的某些内容已损坏。是python、gdb还是别的什么?
【问题讨论】:
-
Ubuntu 14.04 使用 python 3 构建 gdb,所以
print现在是一个函数;使用(gdb) python print(sys.path) -
谢谢,回答了这个问题。但是,原始错误“ImportError: No module named 'libstdcxx'”仍然存在。这是否意味着这个脚本需要转换为 python 3?
-
libstdc++.so.6.0.19-gdb.py中的脚本应该根据该电子邮件消息进行修复,并可能移植到 python 3(我还没有仔细研究它)。但是,如果您的目标是使用系统版本的 gcc 编译的(即,您没有交叉编译,也没有使用与系统附带的 gcc 版本不同的版本),您可以执行(gdb) python sys.path.append("/usr/share/gcc-4.8/python");那么libstdc++.so.6.0.19-gdb.py脚本将不存在的目录添加到路径中并不重要。 -
@Mark:谢谢!我还在 ~/.gdbinit 中添加了这一行,每次运行 gdb 时都会自动加载:
python sys.path.append("/usr/share/gcc-4.8/python") -
已确认的错误:bugs.launchpad.net/ubuntu/+source/gcc-4.8/+bug/1473599...or 在这里更有帮助:bugs.launchpad.net/ubuntu/+source/gcc-4.8/+bug/1446828。用包含 multiarch 的 if 语句注释掉这两行,问题就会消失(在 /usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb 中。 py)。
标签: python-2.7 gdb pretty-print