GDB在7.0版本之后,加入了调试python程序的支持(https://docs.python.org/devguide/gdb.html)。通常情况下,按照http://blog.csdn.net/liangzhao_jay/article/details/47807183中的步骤就可以快速配置好python的GDB调试环境。
但是如果机器上的Python环境不是使用包管理工具自动安装的,或者包管理工具安装的GDB版本太老或没有python调试的支持,那么,就不得不手工编译GDB了。我在Ubuntu 15.10上编译GDB时遇到了一些坑,记下来备查。
步骤如下:
- apt-get -y install texinfo python3.5-dbg
- 下载GDB wget http://ftp.gnu.org/gnu/gdb/gdb-7.11.1.tar.gz
- 解压后进入目录 tar zxf gdb-7.11.1.tar.gz && cd gdb-7.11.1
- 执行./configure --with-python
- make && make install,这样gdb就被安装到/usr/local/bin目录下了
- 拷贝如下代码到test.py
import time time.sleep(10000)
7. 执行python3 test.py &
8. gdb python3 <pid of test.py>
9. 输入py-bt就可以看到python调用栈了。如果此时不能看到python调用栈,执行如下脚本
#!/bin/bash cp -r /usr/lib/debug /usr/local/lib/ mkdir -p /usr/local/lib/debug/usr/local/bin cp /usr/local/lib/debug/usr/bin/* /usr/local/lib/debug/usr/local/bin
以下为完整的安装脚本:
#!/bin/bash apt-get update apt-get -y install texinfo python3.5-dbg wget http://ftp.gnu.org/gnu/gdb/gdb-7.11.1.tar.gz tar zxf gdb-7.11.1.tar.gz cd gdb-7.11.1 ./configure --with-python make && make install cp -r /usr/lib/debug /usr/local/lib/ mkdir -p /usr/local/lib/debug/usr/local/bin cp /usr/local/lib/debug/usr/bin/* /usr/local/lib/debug/usr/local/bin rm -rf gdb-7.11.1 rm gdb-7.11.1.tar.gz