gdb只可以查看python进程cpython解释器的堆栈信息,是c代码的堆栈信息,对我们排查问题非常不友好。如果我们需要查看python代码的堆栈信息才更好定位问题。
一、方法一 使用gdb python调试插件
可以安装python-debuginfo插件,此插件可以在gdb里添加python风格的相关命令,打印pyton代码的堆栈信息
- py-list 查看当前python进程上下文
- py-bt 查看当前python进程堆栈
- py-locals 查看当前python frame变量
- py-print 显示当前python frame某变量信息
- py-up 查看上一个frame
- py-down 查看上一个frame
使用方法:
sudo gdb python {python进程pid}
具体用法,可以参数官方网站:https://wiki.python.org/moin/DebuggingWithGdb
一、方法二 使用pystack库
此方法也是我推荐的方法,最大的亮点是pystack可以打印python协程的堆栈信息
使用方法:
1、安装 pystack-debugger python库。最好在官网下载whl后缀的包,centos也支持,如pystack_debugger-0.10.0-py3-none-any.whl。
2、yum install pystack_debugger-0.10.0-py3-none-any.whl即可安装。
3、 pystack [OPTIONS] PID 即可打印python进程堆栈信息,加上参数 --include-greenlet 可以打印python进程所有堆栈信息。对调试协程很有用。