【问题标题】:Ubuntu 14.04, gcc 4.8.4: gdb pretty printing doesn't work because of Python issueUbuntu 14.04、gcc 4.8.4:由于 Python 问题,gdb 漂亮打印不起作用
【发布时间】: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


【解决方案1】:

我将此作为答案发布,以便其他人更容易找到它。 Mark Plotnick 和 webbertiger 的 cmets 就是真正的答案。

总而言之,这对我有用:

  • 创建了一个 ~/.gdbinit 文件
  • 在该文件中添加了python sys.path.append("/usr/share/gcc-4.8/python");

我使用的是 Eclipse CDT,所以我检查了这个文件是否正在窗口 > 首选项 > GDB > GDB 命令文件中使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2020-07-07
    • 2014-06-28
    • 2012-09-16
    • 2014-09-15
    相关资源
    最近更新 更多