zoukankan      html  css  js  c++  java
  • pdb-不需要IDE也能调试

     python中有个pdb模块,使python代码也可以像gdb那样进行调试,一般情况下pdb模块可以在代码内直接使用,也可以通过命令行参数的形式添加该模块进行调试(python -m pdb file.py)。在代码中直接使用pdb模块调试时,import pdb模块后,然后在需要调试的代码出添加pdb.set_trace()命令即可,运行程序后,在运行到次代码处会自动停止,进入调试模式。

    一般常用的调试命令有如下:

    q  退出debug
    h  打印可用的调试命令
    b  设置断点,b 5 在第五行设置断点
    h command  打印command的命令含义
    disable codenum  使某一行断点失效
    enable codenum   使某一行的断点有效
    condition codenum xxx  针对断点设置条件
    c    继续执行程序,直到下一个断点
    n    执行下一行代码,如果当前语句有函数调用,则不会进入函数体中,当前行直接返回(单步跳过)
    s    执行下一行代码,但是s会进入函数,并停在第一个能停的地方(相当于单步进入)
    w    打印当前执行点的位置
    j    codenum  让程序跳转到指定的行
    l    列出附近的源码
    p    打印一个参数的值 
    a    打印当前函数及参数的值
    回车  重复执行上一行

    其中p 这个命令很关键,可以查看参数的值,很好!

    测试代码如下sum.py:

    #/usr/bin/python
    
    def add_t( ):
        i=1
        sum=0
        for i in range(1,5):
            sum=sum+i
            print sum
    if __name__ == '__main__':
        add_t()

    调试过程如下:python -m pdb sum.py

    n调试

    1 > /opt/sum.py(3)<module>()
      2 -> def add_t( ):
      3 (Pdb) n
      4 > /opt/sum.py(9)<module>()
      5 -> if __name__ == '__main__':
      6 (Pdb) n
      7 > /opt/sum.py(10)<module>()
      8 -> add_t()
      9 (Pdb) n
     10 1
     11 3
     12 6
     13 10
     14 --Return--
     15 > /opt/sum.py(10)<module>()->None
     16 -> add_t()
     17 (Pdb) q

        n表示执行下一行代码,但是不陷入函数内部,可以看第3、6、9行,在执行add_t函数时并未陷入函数内部。

    s调试

    1 > /opt/sum.py(3)<module>()
      2 -> def add_t( ):
      3 (Pdb) s
      4 > /opt/sum.py(9)<module>()
      5 -> if __name__ == '__main__':
      6 (Pdb) s
      7 > /opt/sum.py(10)<module>()
      8 -> add_t()
      9 (Pdb) s
     10 --Call--
     11 > /opt/sum.py(3)add_t()
     12 -> def add_t( ):
     13 (Pdb) s
     14 > /opt/sum.py(4)add_t()
     15 -> i=1
     16 (Pdb) s
     17 > /opt/sum.py(5)add_t()
     18 -> sum=0
     19 (Pdb) s
     20 > /opt/sum.py(6)add_t()
     21 -> for i in range(1,5):
     22 (Pdb) s
     23 > /opt/sum.py(7)add_t()
     24 -> sum=sum+i
     25 (Pdb) s
     26 > /opt/sum.py(8)add_t()
     27 -> print sum
     28 (Pdb) p i
     29 1
     30 (Pdb) p sum
     31 1
     32 (Pdb) s
     33 1
     34 > /opt/sum.py(6)add_t()
     35 -> for i in range(1,5):
     36 (Pdb) s
     37 > /opt/sum.py(7)add_t()
     38 -> sum=sum+i
     39 (Pdb) s
     40 > /opt/sum.py(8)add_t()
     41 -> print sum
     42 (Pdb) p i
     43 2
     44 (Pdb) p sum
     45 3
     46 (Pdb)

        s调试和n调试一样,只不过s在遇到函数时会进入函数进行调试,9、12、13表示进入add_t函数内部进行调试,后面使用p命令打印相关函数内参数的值,后面输入r即可退出函数内部的调试。

    也可以在py文件里加pdb.set_trace()

    例如:

    import pdb
    
    def make_bread():
        pdb.set_trace()
        return "I don't have time"
    
    print(make_bread())
  • 相关阅读:
    母牛的故事
    python 实现计算数独
    java程序计算数独游戏
    《深入理解Java虚拟机》笔记7
    安装red5 1.0.1版本Java_home不能用Java7
    计算流图中的循环集合
    《深入理解Java虚拟机》笔记5
    《深入理解Java虚拟机》笔记4
    n的阶乘-编程2.md
    爬楼梯问题-斐波那契序列的应用.md
  • 原文地址:https://www.cnblogs.com/dahu-daqing/p/6925876.html
Copyright © 2011-2022 走看看