如何使用linux下gdb来调试python程序

使用linux下gdb来调试python程序前提条件:

1)确保gdb版本>=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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值