python 调试器

发布时间:2019-08-07 13:52:57编辑:auto阅读(1778)


    python 调试器:

    使用 pdb 进行调试

    pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令,详情见表 1。

    表 1. pdb 常用命令


    wKiom1aaQfmgn9ovAAAoVgbW4fQ070.png



    import pdb

    pdb.set_t





    下面结合具体的实例讲述如何使用 pdb 进行调试。

    清单 1. 测试代码示例
    vim pdbtest.py    
    #!/usr/bin/env python
    
    
    import pdb
    a = "aapdb"
    pdb.set_trace() 
    b = "bbbaa"
    c = "cccaaa"
    final = a + b + c 
    print final




     python  pdbtest.py

    > /root/pdbtest.py(7)<module>()

    -> b = "bbbaa"

    (Pdb) 

    (Pdb) c

    aapdbbbbaacccaaa




    开始调试:直接运行脚本,会停留在 pdb.set_trace() 处,选择 n+enter 可以执行当前的 statement。在第一次按下了 n+enter 之后可以直接按 enter 表示重复执行上一条 debug 命令。


    清单 2. 利用 pdb 调试
    python  pdbtest.py
    > /root/pdbtest.py(7)<module>()
    -> b = "bbbaa"
    (Pdb) list
      2  
      3  
      4     import pdb 
      5     a = "aapdb"
      6     pdb.set_trace() 
      7  -> b = "bbbaa"
      8     c = "cccaaa"
      9     final = a + b + c 
     10     print final
    [EOF]
    (Pdb) n
    > /root/pdbtest.py(8)<module>()
    -> c = "cccaaa"
    (Pdb) n
    > /root/pdbtest.py(9)<module>()
    -> final = a + b + c
    (Pdb) n 
    > /root/pdbtest.py(10)<module>()
    -> print final
    (Pdb) n
    aapdbbbbaacccaaa
    --Return--
    > /root/pdbtest.py(10)<module>()->None
    -> print final
    (Pdb)



    退出 debug:使用 quit 或者 q 可以退出当前的 debug,但是 quit 会以一种非常粗鲁的方式退出程序,其结果是直接 crash。










    race() # 开启pdb提示

    或者

    try:
    (一段抛出异常的代码)
    except:
        import pdb
        pdb.pm() # 或者 pdb.post_mortem()


    或者(输入 c 开始执行脚本)

    python -mpdb script.py


    在输入-计算-输出循环(注:REPL,READ-EVAL-PRINT-LOOP的缩写)环境下,可以有如下操作:

    • c or continue

    • q or quit

    • l or list, 显示当前步帧的源码

    • w or where,回溯调用过程

    • d or down, 后退一步帧(注:相当于回滚)

    • u or up, 前进一步帧

    • (回车), 重复上一条指令

    其余的几乎全部指令(还有很少的其他一些命令除外),在当前步帧上当作python代码进行解析。

    如果你觉得挑战性还不够的话,可以试下smiley,-它可以给你展示那些变量而且你能使用它来远程追踪程序。






    iPDB是一个极好的工具,我已经用它查出了很多匪夷所思的bug。

    pip install ipdb 安装该工具,然后在你的代码中import ipdb; ipdb.set_trace(),然后你会在你的程序运行时,获得一个很好的交互式提示。它每次执行程序的一行并且检查变量。


    更好的调试器

    pdb的直接替代者:
    ipdb(easy_install ipdb) – 类似ipython(有自动完成,显示颜色等)
    pudb(easy_install pudb) – 基于curses(类似图形界面接口),特别适合浏览源代码

     




关键字

上一篇: mod_python问题

下一篇: python 安装pymssql