无法为gdb启用py-bt

Mar*_*lla 13 python gdb

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

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

add-auto-load-safe-path /path/to/dir/with/python-gdb.py

~/.gdbinit.我测试了它

gdb --args /path/to/python3.5/binary
(gdb) py-bt
Run Code Online (Sandbox Code Playgroud)

但我明白了

Undefined command: "py-bt"
Run Code Online (Sandbox Code Playgroud)

gdb 是版本7.2并启用了python支持.

Ale*_*der 13

基于博客文章通过使用gdb调试CPython进程 解决问题的一种方法是源python3.5-gdb.py文件.运行命令info auto-load检查文件是否已加载(如果是),如果不加载 - 手动加载:( source /usr/share/gdb/auto-load/usr/bin/python3.5-gdb.py !路径可能不同).

然后py-bt应该工作!

编辑:改变py版本

  • 如何找到 gdb.py 文件在哪里? (3认同)
  • 我认为你必须先执行 `sudo apt-get install python3-dbg` 。 (2认同)

Mar*_*ick 6

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

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

-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
Run Code Online (Sandbox Code Playgroud)

这是一个 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".
Run Code Online (Sandbox Code Playgroud)


Mar*_*lla 5

找到了!您必须添加/PATH_TO_PYTHON_SRC/Tools/gdbPYTHONPATH,那么gdb你应该能够执行:

python import libpython
Run Code Online (Sandbox Code Playgroud)

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