zoukankan      html  css  js  c++  java
  • gdb调试python

    一、概述

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

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

    1 $ gdb
    2 (gdb) python
    3 > import sys
    4 >print sys.version
    5 >end
    6 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并连接

       3.下载libpython.py

    三、开始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的内存使用情况
  • 相关阅读:
    7.12-7.19 id、w、who、last、lastb、lastlog
    查询登录信息 w, who*, id, tty, last, finger
    [rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。
    :整数 跳转到该行 Vim中常用的命令
    spec2006与spec2000的对比简要说明
    Linux性能监控与分析之--- CPU
    Android实现登录小demo
    python学习笔记——旧类与新类继承中的构造函数
    tair ldb存储引擎性能測试方案
    串口通讯方式1编程
  • 原文地址:https://www.cnblogs.com/chris-cp/p/6007100.html
Copyright © 2011-2022 走看看