2016-12-15 215 views
4

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

来自官方的Python文档约gdb extension,他们说,这样做的唯一一件事情就是

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支持。

回答

0

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

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

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