2014-10-07 106 views
19

我使用的是Ubuntu 14.04,其中python3是一个默认的系统软件包。如何更改gdb使用的Python解释器?

我想调试使用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 BTW。我在ubuntu 14.04上做了它,它破坏了我的系统。无法设法重新启动它。我目前正在使用它没有窗口管理器(这很酷,1337),但你明白了。

+1

为什么python 3默认? – 2014-10-07 20:17:04

+0

我想是因为Ubuntu这么说的..?我没有多少读,但https://wiki.ubuntu.com/Python/3这说很多脚本被移植到python 3(尽管不是全部)。在任何情况下,我的gdb安装(或编译或任何)加上python3 – 2015-04-17 14:49:09

+0

相关问题:https://bugs.launchpad.net/ubuntu/+source/gdb/+bug/1241668 – 2015-07-03 09:13:00

回答

14

所以,虽然GDB表示,他们会用我的2.7翻译

GDB不说。它说它使用3.4.0,并且该解释器是链接到 GDB,形式为libpython3.4.alibpython3.4.so

由于没有涉及到实际的Python二进制文件,因此这里的(次要)错误是sys.executable返回/usr/bin/python。相反,它可能会更好地返回/usr/bin/gdb

我需要一个解释器2.7

在这种情况下,你必须重建从源gdb,适当--with-python值配置之后。

+0

我可以知道我的gdb是如何扯皮? (我的意思是有什么选择?) – 2016-08-16 04:53:21

+1

@ChanKim:要查看哪个版本的Python库链接到了你安装的GDB,请试试'ldd $(which gdb)| grep python' – kevinarpe 2017-02-04 16:31:03

+1

@kevinarpe你建议的方法只适用于gdb与libpython动态链接的情况。使用的方法OP('print(sys。版本)')作品*永远*。 – 2017-02-04 16:48:29