zoukankan      html  css  js  c++  java
  • [转] python程序的调试方法

    qi09 原文 python程序的调试方法

    本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序

    源码例子

    例如,有模拟税收计算的程序:

    #!/usr/bin/python 
    def debug_demo(val): 
                    if val <= 1600 : 
                                    print "level 1" 
                                    print 0 
                    elif val <= 3500 : 
                                    print "level 2" 
                                    print (val - 1600) * 0.05 
                    elif val <= 6500 : 
                                    print "level 3" 
                                    print (val - 3500) * 0.10 + (3500-1600) * 0.05 
                    else: 
                                    print "level 4" 
                                    print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05 
    #~def debug_demo                 
    if __name__ == "__main__": 
                    debug_demo(4500)

    debug_demo函数计算4500的入账所需的税收。

    如何调试?

    1.加入断点

    在需要插入断点的地方,加入红色部分代码:如果_DEBUG值为True,则在该处开始调试(加入_DEBUG的原因是为了方便打开/关闭调试)。

    #!/usr/bin/python 
    _DEBUG=True 
    def debug_demo(val): 
                    if _DEBUG == True: 
                                    import pdb 
                                    pdb.set_trace() 
                    if val <= 1600 : 
                                    print "level 1" 
                                    print 0 
                    elif val <= 3500 : 
                                    print "level 2" 
                                    print (val - 1600) * 0.05 
                    elif val <= 6500 : 
                                    print "level 3" 
                                    print (val - 3500) * 0.10 + (3500-1600) * 0.05 
                    else: 
                                    print "level 4" 
                                    print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05 
    #~def debug_demo                 
    if __name__ == "__main__": 
                    debug_demo(4500)

    2.开始运行调试

      运行程序./debug_demo.py,得到

    > /usr/local/qspace/user_network/debug_demo.py(7)debug_demo() 
    -> if val <= 1600 : 
    (Pdb)

    -> val <= 1600 : 指示当前执行的语句,(Pdb)等待你的调试指令. pdb的指令很丰富,输入h指令可以查看指令的使用方法。

    下面简单介绍常用指令:

      查看代码上下文,l(小写L)

    (Pdb) l 
        2         _DEBUG=True 
        3         def debug_demo(val): 
        4                         if _DEBUG == True: 
        5                                         import pdb 
        6                                         pdb.set_trace() 
        7    ->                 if val <= 1600 : 
        8                                         print "level 1" 
        9                                         print 0 
      10                         elif val <= 3500 : 
      11                                         print "level 2" 
      12                                         print (val - 1600) * 0.05 
    (Pdb)   

    左边是行号,右边是代码正文。

      监视变量:p 变量名

    (Pdb) p val 
    4500 
    (Pdb)   

    单步执行: n

    -> elif val <= 3500 : 
    (Pdb) l  
      5                                         import pdb  
      6                                         pdb.set_trace()  
      7                         if val <= 1600 :  
      8                                         print "level 1"  
      9                                         print 0 
    10    ->                 elif val <= 3500 : 
    11                                         print "level 2" 
    12                                         print (val - 1600) * 0.05 
    13                         elif val <= 6500 : 
    14                                         print "level 3" 
    15                                         print (val - 3500) * 0.10 + (3500-1600) * 0.05

     

    加入断点:b 行号

    (Pdb) b 14

    运行到断点: c

    (Pdb) c 
    > /***** 
    -> print "level 3" 
    (Pdb) l  
      9                                         print 0 
    10                         elif val <= 3500 : 
    11                                         print "level 2" 
    12                                         print (val - 1600) * 0.05 
    13                         elif val <= 6500 : 
    14 B->                                 print "level 3" 
    15                                         print (val - 3500) * 0.10 + (3500-1600) * 0.05 
    16                         else: 
    17                                         print "level 4" 
    18                                         print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05 
    19    

    执行到函数返回前: r

    (Pdb) r 
    level 3 
    195.0 
    --Return-- 
    > /****()

    ->None 
    -> print (val - 3500) * 0.10 + (3500-1600) * 0.05 
    (Pdb)   

    说明:

    pdb还有很多其他很多有用的指令,读者可以自行探索。输入h,h 命令。就可以得到命令的详细帮助。

    不过,我个人认为一般无需启动这种调试方法,一般使用日志输出进行调试即可,除非遇到了非常微妙的错误。这时,单步调试的威力便显示出来了

  • 相关阅读:
    1062 Talent and Virtue (25 分)
    1083 List Grades (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1121 Damn Single (25 分)
    1120 Friend Numbers (20 分)
    1084 Broken Keyboard (20 分)
    1092 To Buy or Not to Buy (20 分)
    数组与链表
    二叉树
    时间复杂度与空间复杂度
  • 原文地址:https://www.cnblogs.com/arxive/p/5918398.html
Copyright © 2011-2022 走看看