Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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
Python Can';t为gdb启用py-bt_Python_Gdb - Fatal编程技术网

Python Can';t为gdb启用py-bt

Python Can';t为gdb启用py-bt,python,gdb,Python,Gdb,我已经在CentOS 6.5机器上下载并编译了Python 3.5。它毫无问题地工作。问题是我必须使用gdb来调试一个微妙的bug,该bug涉及python程序执行过程中cpu的过度使用 在关于的官方Python文档中,他们说唯一要做的就是添加 添加自动加载安全路径/path/to/dir/with/python gdb.py 到~/.gdbinit。我试了一下 gdb --args /path/to/python3.5/binary (gdb) py-bt 但我明白了 Undefined c

我已经在CentOS 6.5机器上下载并编译了Python 3.5。它毫无问题地工作。问题是我必须使用
gdb
来调试一个微妙的bug,该bug涉及python程序执行过程中cpu的过度使用

在关于的官方Python文档中,他们说唯一要做的就是添加

添加自动加载安全路径/path/to/dir/with/python gdb.py

~/.gdbinit
。我试了一下

gdb --args /path/to/python3.5/binary
(gdb) py-bt
但我明白了

Undefined command: "py-bt"

gdb
是7.2版,并且启用了python支持。

找到了!您必须将
/PATH\u添加到
PYTHONPATH
,然后在
gdb
中您应该能够执行:

python import libpython
来源:

gdb通过查看搜索路径中以目录为根的目录树,自动加载gdbcli(或Python或Scheme)脚本。对于加载的每个可执行文件或共享对象,gdb都会查找名为
objfile gdb.gdb
(或
objfile gdb.py
objfile gdb.scm
)的脚本

自动加载
python
的gdb扩展的一种方法是将下载的
python gdb.py
文件放在脚本目录路径中的一个目录下。例如,Ubuntu上的
python2.7-dbg
包安装以下文件:

-rwxr-xr-x /usr/lib/debug/usr/bin/python2.7-gdb.py
lrwxrwxrwx /usr/lib/debug/usr/lib/libpython2.7.so.1.0-gdb.py -> ../bin/python2.7-gdb.py
下面是一个gdb会话,它显示了当我开始调试
/usr/bin/python
可执行文件时,
python2.7-gdb.py
脚本是如何自动加载的:

(gdb) show auto-load scripts-directory
List of directories from which to load auto-loaded scripts is $debugdir:$datadir/auto-load.
(gdb) set debug auto-load
(gdb) file /usr/bin/python
Reading symbols from /usr/bin/python...Reading symbols from /usr/lib/debug//usr/bin/python2.7...done.
auto-load: Attempted file "/usr/lib/debug/usr/bin/python2.7-gdb.gdb" does not exist.
auto-load: Expanded $-variables to "/usr/lib/debug:/usr/share/gdb/auto-load".
auto-load: Searching 'set auto-load scripts-directory' path "$debugdir:$datadir/auto-load".
auto-load: Attempted file "/usr/share/gdb/auto-load/usr/lib/debug/usr/bin/python2.7-gdb.gdb" does not exist.
auto-load: Attempted file "/usr/lib/debug/usr/bin/python2.7-gdb.py" exists.
auto-load: Loading python script "/usr/lib/debug/usr/bin/python2.7-gdb.py" by extension for objfile "/usr/lib/debug/usr/bin/python2.7".
基于 解决此问题的另一种方法是源代码
python3.5-gdb.py
文件。 运行命令
info auto load
检查文件是否已加载(如果已加载) 如果没有,则手动加载:
source/usr/share/gdb/auto-load/usr/bin/python3.5-gdb.py
(!路径可能不同)

那么
py-bt
应该可以工作了


编辑:更改了py版本

如何找到gdb.py文件的位置?您可以尝试以下命令:
locate*-gdb.py | grep-gdb/auto-load/usr/bin
我想您必须先执行
sudo-apt安装python3-dbg
。我将
python-gdb.py
添加到
/usr/share/gdb/auto-load/usr/lib/python3//code>成功。@MarcoSulla能否显示
set debug auto load
后跟
file/path/to/your/python
作为输出生成的内容?没有。现在我正在做其他测试,所以我无法复制,抱歉。添加
add auto-load-safe路径/path/TO/PYTHON/BUILDDIR/PYTHON-gdb.py
似乎有效,但我无法在gdb中导入libpython。