Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改gdb使用的Python解释器?_Python_Python 2.7_Gdb - Fatal编程技术网

如何更改gdb使用的Python解释器?

如何更改gdb使用的Python解释器?,python,python-2.7,gdb,Python,Python 2.7,Gdb,我使用的是ubuntu 14.04,其中python3是默认的系统包 我想用gdb调试Python2.7程序,但我似乎遇到了这个问题: 当我在gdb中时,使用py命令将我放入解释器中,因此我在解释器中运行了以下命令: 12:34]hostname ~ $ls -l /usr/bin/python lrwxrwxrwx 1 root root 9 Dec 21 2013 /usr/bin/python -> python2.7 首先,我检查解释器版本: (gdb) py >imp

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

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

当我在gdb中时,使用
py
命令将我放入解释器中,因此我在解释器中运行了以下命令:

12:34]hostname ~ $ls -l /usr/bin/python 
lrwxrwxrwx 1 root root 9 Dec 21  2013 /usr/bin/python -> python2.7
首先,我检查解释器版本:

(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特定扩展一起使用,因为据我所知,Python3.4还没有这样的包,即使有,我想调试运行python2.7的程序

我的问题是如何使用我想要的翻译

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

所以尽管gdb说它在使用我的2.7解释器

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

由于没有实际的Python二进制文件,这里的(小)错误是
sys.executable
返回
/usr/bin/Python
。它最好返回
/usr/bin/gdb

我需要一个2.7的翻译


在这种情况下,您必须从源代码处重新构建
gdb
,然后使用python值配置它。。?我对它没有太多的了解,但这说明很多脚本都移植到了Python3(尽管不是全部)。在任何情况下,我的gdb安装(或编译或其他)与Python3相关的问题:我能知道我的gdb是如何工作的吗?(我的意思是使用什么选项?@ChanKim:要查看哪个版本的Python库链接到您安装的GDB,请尝试
ldd$(哪个GDB)| grep Python
@kevinarpe您建议的方法只有在GDB与libpython动态链接时才有效。OP使用的方法(
print(sys.version)
)总是有效的。疯狂。。。我有一个用JetBrains CLion分发的GDB副本,我无法确定它是用ldd链接到哪一个Python上的——没有显示libpython。但是,如果使用JetBrains CLion的GDB,我运行命令
python import sys
然后
python print(sys.version)
,我发现python解释器是v2而不是v3。就我所知,这个答案是最好的。然而,有两件事值得一提;首先给出这个链接,在这里你可以一步一步地找到,如何构建一个定制的GDB和源代码。第二点需要指出的是,当您构建GDB时,默认情况下,它使用对python2的引用,并且只有当您想使用python3时,才必须指定python版本。希望这有帮助这只是在gdb中运行两个python解释器。它与gdb捆绑的python版本无关。
$ 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