无法为gdb启用py-bt

时间:2016-12-15 09:20:07

标签: python gdb

我已经在CentOS 6.5机器上下载并编译了Python 3.5。它没有问题。问题是我必须使用gdb来调试在我的python程序执行期间涉及cpu过度使用的细微错误。

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

add-auto-load-safe-path /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支持。

3 个答案:

答案 0 :(得分:9)

基于Debugging of CPython processes with gdb的博客文章 解决此问题的另一种方法是获取python3.5-gdb.py文件。 运行命令info auto-load以检查是否已加载文件(如果已加载) 如果不是,请手动加载: source /usr/share/gdb/auto-load/usr/bin/python3.5-gdb.py (!路径可能不同)。

然后py-bt应该可以工作!

已编辑:更改了py版本

答案 1 :(得分:5)

发现它!您必须将/PATH_TO_PYTHON_SRC/Tools/gdb添加到PYTHONPATH,然后在gdb中您应该能够执行:

python import libpython

来源:https://sumitkgaur.wordpress.com/2014/05/13/python-debugging/

答案 2 :(得分:2)

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

自动加载python的gdb扩展的一种方法是将您下载的python-gdb.py文件放在scripts-directory路径中的一个目录下。例如,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会话,显示了当我开始调试python2.7-gdb.py可执行文件时如何自动加载/usr/bin/python脚本:

(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".