【发布时间】:2018-05-29 23:22:02
【问题描述】:
我想从正在运行的 python 进程中获取堆栈跟踪,使用 gdb。 python 在 Ubuntu 16.4 上由 pyenv 管理的 virtualenv 中运行。
我试过这个:
sudo gdb ~/.pyenv/versions/bla/bin/python -p <PID>
那我没有可用的扩展,所以我有
symbol-file /usr/bin/python3.5-dbg
然后当我运行 py-list 时,我得到以下错误:
无法为 python 字节码解释器找到 gdb 帧。
还尝试过:
sudo gdb /usr/bin/python3.5-dbg -p <PID> 和同样的错误。
还有什么办法吗?还是更简单的方法?
【问题讨论】:
-
python进程编译时是否带有调试标志?
-
不,python 脚本是用 python 运行的。 python 本身,我使用 pyenv 安装的。
-
如果你在没有 sudo 的情况下运行 gdb,一切正常吗?您可能必须使用
echo 0 > /proc/sys/kernel/yama/ptrace_scope来临时允许 gdb 访问它没有创建的进程。 (如有必要,请获得您负责的安全人员的批准,因为这会使您的系统稍微不安全)。 -
@MarkPlotnick 感谢您的回复。难道没有别的办法了吗?也为
py-bt我得到“无法定位 python 框架”。 -
可能还有其他解决方法,但解决问题的直接方法是获得一个工作环境,然后看看它与非工作环境有何不同。或者,您能否向我们提供有关您的设置的足够详细信息,以便我们可以在我们自己的 Ubuntu 系统上重现该问题?