博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转] python程序的调试方法
阅读量:7003 次
发布时间:2019-06-27

本文共 2686 字,大约阅读时间需要 8 分钟。

原文

 

本文讨论在没有方便的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 命令。就可以得到命令的详细帮助。

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

 

转载地址:http://gyytl.baihongyu.com/

你可能感兴趣的文章
html5离线应用application cache
查看>>
检查了一下VC2012新增的Intrinsics函数集,发现它支持ARM指令和Haswell新指令
查看>>
Spring自定义属性编辑器
查看>>
不再消极,不再忧虑
查看>>
我的模块加载系统 v20
查看>>
简明Python3教程 5.第一步
查看>>
SharePoint 搜索爬网第三方网站配置
查看>>
总结Movie示例知识点
查看>>
WebUI无阻塞更新的实现
查看>>
协议森林12 天下为公 (TCP堵塞控制)
查看>>
尝试在C++里实现 Java 的 synchronized 关键字
查看>>
POJ-2057 The Lost House 贪心在动态规划中的应用
查看>>
uva10970 Big Chocolate
查看>>
PhoneGap API帮助文档翻译Notification提醒
查看>>
LESS介绍及其与Sass的差异
查看>>
PForDelta索引压缩算法的实现
查看>>
SQL调优:带函数的谓词导致CBO Cardinality计算误差
查看>>
正则表达式最后加一个/g或者/ig代表什么意思
查看>>
ASP.NET Dynamic Data Part.1(创建动态数据应用程序)
查看>>
js中的延迟加载
查看>>