python代码调试

标签: python 代码 调试 | 发表时间:2014-07-16 08:47 | 作者:
出处:http://ganliang13.iteye.com

【转自: http://blog.csdn.net/luckeryin/article/details/4477233

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

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



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [python 代码 调试] 推荐:

python代码调试

- - 阿里古古
【转自: http://blog.csdn.net/luckeryin/article/details/4477233】. 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序. 例如,有模拟税收计算的程序:. debug_demo函数计算4500的入账所需的税收. 在需要插入断点的地方,加入红色部分代码:如果_DEBUG值为True,则在该处开始调试(加入_DEBUG的原因是为了方便打开/关闭调试).

Python调试

- - 企业架构 - ITeye博客
原文地址: http://blog.csdn.net/xuyuefei1988/article/details/19399137. 1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧:. IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试:.

使用 gdb 调试 Python 进程

- yinseny - python.cn(jobs, news)
有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump. 例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢. 这时就需要祭出gdb这个神器了. 确认你的gdb版本是>=7,gdb从版本7开始支持对Python的debug.

我常用的Python调试工具(二)

- - 博客 - 伯乐在线
这是对 上一篇关于调试器的文章的一个小小的补充. 标准库有三种分析方法( cProfile和profile, hotshot)以及不计其数的第三方可视化工具,转化器,以及诸如此类的东西. 工具多了,不靠谱的建议自然少不了. 如果你不知道该用什么,那就用一个可视化的工具吧. 有很多的建议供你选择自己要用的可视化工具,但无论是使用如标准库的Stats模块这种文本形式的还是像 pycallgraph或者 gprof2dot这样的图形化的库,第一反应都是要写代码来生成报表.

Python安全编码与代码审计

- - FreeBuf.COM | 关注黑客与极客
现在一般的web开发框架安全已经做的挺好的了,比如大家常用的django,但是一些不规范的开发方式还是会导致一些常用的安全问题,下面就针对这些常用问题做一些总结. 代码审计准备部分见《php代码审计》,这篇文档主要讲述各种常用错误场景,基本上都是咱们自己的开发人员犯的错误,敏感信息已经去除. 未对输入和输出做过滤,场景:.

python 代码自动生成的方法 (代码生成器)

- - 大CC
python 代码自动生成的方法 (代码生成器). 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错;而借用python的代码自动生成,可以轻松搞定;. (类比JAVA中的Hibernate自动生成的数据库底层操作代码). 下面介绍使用python字符串替换的方法;.

3 行 Python 代码解简单的一元一次方程

- rex - python.cn(jobs, news)
刚才看到一篇《Linear equations solver in 3 lines (Python recipe)》,用3行代码实现了解一元一次方程:. 看上去很强大,于是就解读下代码吧. 首先是第一行,它将等式进行了变形,生成了一个结果为0的算式“x - 2*x + 5*x - 46*(235-24) -( x + 2)”.

谁说使用Python你就写不出混乱的代码?

- bingo - 博客园新闻频道
  本文是从 Penrose Tiling in Obfuscated Python这篇文章翻译而来.   谁说使用Python你就写不出混乱的代码.   下面这段Python代码是用来生成一些彭罗斯铺砖图案的. 不错,这是段可运行的Python代码:.   当这段代码运行时,它会产生一个1000×1000的png格式的彭罗斯铺砖图案,里面包含有大概2212个具有3D浮雕效果的彭罗斯铺砖图.

谁说使用 Python 你就写不出混乱的代码?

- Ken - python.cn(jobs, news)
本文是从 Penrose Tiling in Obfuscated Python 这篇文章翻译而来. 谁说使用Python你就写不出混乱的代码. 下面这段Python代码是用来生成一些彭罗斯铺砖图案的. 不错,这是段可运行的Python代码:. 当这段代码运行时,它会产生一个1000×1000的png格式的彭罗斯铺砖图案,里面包含有大概2212个具有3D浮雕效果的彭罗斯铺砖图.

50行Python代码写一个语言检测器

- - ITeye资讯频道
你有没有曾经好奇过Chrome浏览器是如何知道一个网页的语言,并对外国文字的网页提供翻译服务的. 或者,Facebook是如何翻译你朋友用写在你主页上的外国文字. 检测一种语言实际上非常简单,改进了用户体验,而且不需要用户做任何的事情. 我无意中发现的 ActiveState recipe for a language detector in Python这是非常不错的一段程序,但是我决定做点小小的改进.