gdb调试cpython
主要参考这篇文章:
- https://www.podoliaka.org/2016/04/10/debugging-cpython-gdb/
- https://blog.alswl.com/2013/11/python-gdb/
同时debug c栈和py栈
在调试脚本卡死的时候特别有用,如下图
安装python-dbg
1 | sudo apt-get install gdb python-dbg |
python-dbg
包含symbol和py-bt
会自动把libpython.py装到gdb的auto-load目录,并且保证后面的子目录跟python的目录地址一样
1 | ➜ ~ which python2.7 |
其他版本python安装gdb dbg
由于自己在服务器上安装了多个版本的python,比如自己用源码编译的py3.7
1 | ➜ ~ which python3.7 |
然后可以在python的源码里面找到Toos/gdb/libpython.py
按照上面的目录规则cp到gdb的auto-load,保证调试python3.7进程的时候能找到
1 | ➜ ~ ls /usr/share/gdb/auto-load/usr/local/bin/ |
attach到python进程
1 | ps -x | grep python |
常用指令
1 | bt # 当前C调用栈 |
py-bt如果遇到中文编码问题
export LC_CTYPE=C.UTF-8