怎么读取python中的gdb_gdb调试python

一、概述

有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump。例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢?这时就需要祭出gdb了。

主要是三步:

1)确保你的gdb版本>=7

2)安装python-debuginfo包(如:python-debuginfo-2.6.6-29.el6_2.2.x86_64.rpm,这个版本号一定要跟你所用的python版本一致(可以rpm -qa|grep python查看你安装的python的详细版本号)。找包http://debuginfo.centos.org/6/x86_64/)

3)就可以用#gdb python 进程号,进行调试了。

二、准备

1. 确认你的gdb版本是>=7,gdb从版本7开始支持对Python的debug。

2.确认gdb连接的Python是所要debug的Python,否则请重新编译gdb。

1 $ gdb2 (gdb) python3 >import sys4 >print sys.version5 >end6 2.4.3 ( #1, Sep 21 2011, 19:55:41)7 [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)]

编译时注意,要把自己编译的Python路径加到PATH环境变量里,这样gdb configure的时候才会找到新版Python并连接。

三、开始debug

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了

3、libpython还提供很多命令,例如py-print打印变量,py-locals打印所有本地变量等等,详细可打开libpython.py查看。

一点经验

在gdb可以使用generate-core-file命令生成一个coredump文件。之后可以用gdb –core来打开coredump文件进行debug。避免一直attach住进程,可以快速重启恢复服务

gdb-heap是gdb的一个扩展。可以打印Python的内存使用情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值