Python Can';t为gdb启用py-bt
我已经在CentOS 6.5机器上下载并编译了Python 3.5。它毫无问题地工作。问题是我必须使用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
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。