【问题标题】:How to change the Python Interpreter that gdb uses?如何更改 gdb 使用的 Python 解释器?
【发布时间】:2014-10-07 19:44:21
【问题描述】:

我使用的是 ubuntu 14.04,其中 python3 是默认系统包。

我想用gdb调试Python2.7程序,但是我好像遇到了这个问题:

当我在 gdb 中时,使用 py 命令会将我置于解释器中,因此我在解释器中运行了这些命令:

首先我检查解释器版本:

(gdb) py
>import sys
>print(sys.version)
>end
3.4.0 (default, Apr 11 2014, 13:08:40) 
[GCC 4.8.2]

然后我检查正在使用的解释器可执行文件

(gdb) py
>import sys
>print(sys.executable)
>end
/usr/bin/python
(gdb) 

然后在 bash 中,我检查解释器:

12:34]hostname ~ $ls -l /usr/bin/python 
lrwxrwxrwx 1 root root 9 Dec 21  2013 /usr/bin/python -> python2.7

虽然 gdb 说它使用的是我的 2.7 解释器,但实际上它使用的是另一个解释器。我需要一个 2.7 解释器才能将它与 ubuntu 包“python2.7-dbg”提供的 python 特定扩展一起使用,因为据我所知,python 3.4 还没有这样的包,即使有,我要调试的程序运行 python 2.7

我的问题是如何让它使用我想要的解释器?

[编辑] 不要卸载 python3 顺便说一句。我在 ubuntu 14.04 上完成了它,它破坏了我的系统。没能重新站起来。我目前正在使用它,没有窗口管理器(它很酷,1337),但你明白了。

【问题讨论】:

标签: python python-2.7 gdb


【解决方案1】:

虽然 gdb 说它使用的是我的 2.7 解释器

GDB 没有这么说。它说它使用的是 3.4.0,并且解释器以libpython3.4.alibpython3.4.so 的形式链接到 GDB。

由于不涉及实际的 Python 二进制文件,这里的(小)错误是 sys.executable 返回 /usr/bin/python。它可能会更好地返回/usr/bin/gdb

我需要一个 2.7 的解释器

在这种情况下,您必须在使用适当的 --with-python 值配置 gdb 后从源代码重建它。

【讨论】:

  • 我能知道我的 gdb 是怎样的吗? (我的意思是有哪些选项?)
  • @ChanKim:要查看哪个版本的 Python 库链接到您安装的 GDB,请尝试 ldd $(which gdb) | grep python
  • @kevinarpe 您建议的方法仅在 gdb 与 libpython 动态链接时才有效。 OP 使用的方法 (print(sys.version))总是有效。
  • Crazy... 我有一份与 JetBrains CLion 一起分发的 GDB 副本,但我无法确定它使用 ldd 链接到哪个 Python - 不显示 libpython。但是,如果使用 JetBrains CLion 的 GDB 并运行命令 python import sys 然后 python print(sys.version),我看到 Python 解释器是 v2 而不是 v3。
  • 据我所知,这个答案是最好的。但是,有几件事需要提及;首先给出这个链接linuxfromscratch.org/blfs/view/svn/general/gdb.html,您可以在其中一步一步找到如何构建自定义 GDB 和源代码。其次要指出的是,当你构建 GDB 时,默认情况下,它使用对 python2 的引用,并且只有在你想使用 python3 时才必须指定 python 版本。希望这会有所帮助
【解决方案2】:
$ apt-get -qq update
$ apt-get install gdb python2.7-dbg python3-all-dbg
$ gdb -ex r -ex quit --args python2 -c "import sys ; print(sys.version)" # Py2.7
$ gdb -ex r -ex quit --args python3 -c "import sys ; print(sys.version)" # Py3.6

【讨论】:

  • 这只是在 gdb 中运行两个 python 解释器。与gdb捆绑的python版本无关。
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
相关资源
最近更新 更多