使用linux下gdb来调试python程序前提条件:
1)确保gdb
iis7站长之家>=7.0
2)安装python-debuginfo包。
如:python-debuginfo-2.6.6-29.el6_2.2.x86_64.rpm,这个版本号一定要跟你所用的python版本一致(可以rpm -qa|grep python查看你安装的python的详细版本号)。
Centos下找包地址为:http://debuginfo.centos.org/6/x86_64/。
3)就可以运行命令
#gdb python pid
进行调试。
linux下gdb如何调试python程序
(1)假设要debug的进程号为1000,运行如下命令:
$ gdb -p 1000
使用此命令即可使gdb附加到进程。
(2)载入libpython脚本
如果你的gdb是redhat或fedora等厂商修改过的,会有--python选项,使用此选项即可指定gdb启动时载入的Python扩展脚本(此脚本是扩展gdb的,不是我们需要debug的脚本)。
$ gdb --python /path/to/libpython .py -p 1000
如果安装的是GNU的gdb,就需要打开gdb后手动载入libpython.py脚本
(gdb) python
> import sys
>sys.path.insert(0, '/path/to/libpython.py' )
> import libpython
>end
(gdb)
这时就可以使用py-bt命令打印当前线程的Python traceback了。libpython还提供很多命令,例如py-print打印变量,py-locals打印所有本地变量等等,详细可打开libpython.py查看。
直接通过GDB进行调试python程序对应的c语言程序的方法
使用gdb attach到python程序上,然后在堆栈中找到PyFrameObject对象, 从而定位到出问题的python函数。
调用堆栈相应的函数名,文件名和行号获取方法如下:
函数名: *(char*)&(((PyStringObject*)f->f_code->co_name)->ob_sval)
文件名: *(char*)&(((PyStringObject*)f->f_code->co_filename)->ob_sval)
行号: f->f_code->firstlineno