我已经在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支持。
答案 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.py
或objfile-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".