【转自: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 命令。就可以得到命令的详细帮助。

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

python程序的调试方法的更多相关文章

  1. [转] python程序的调试方法

    qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python de ...

  2. Windows系统中设置Python程序定时运行方法

    Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...

  3. 微信小程序开发系列教程三:微信小程序的调试方法

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 这个教程的前两篇文章,介绍了如何用下图所示的微信开发者工具自动生成一个Hel ...

  4. Python入门(一):PTVS写Python程序,调试模式下input()提示文字乱码问题

    前两天写了Python入门(一),里面提到,使用VS2013+PTVS进行Python开发. 就在准备为第二篇写个demo的时候,发现了一个问题,各种解决无果,有些纠结 Python中输入函数是inp ...

  5. 添加树莓派python程序自启动的方法

    首先确保网络,硬件连接都正确.保证py程序可以正确运行. 然后远程登录树莓派 打开这个文件来修改自启动,网上有很多方法都是新建一个脚本来完成的.由于我们是自启动python文件,所以命令会有不同. 如 ...

  6. linux环境下python的pdb调试方法

    一些常用指令: h(elp) [comman]  #打印可用指令及帮助信息 r(eturn)  #运行代码直到下一个断点或当前函数返回 b(reak) [[filename:]lineno | fun ...

  7. js程序的调试方法

  8. Python Flask API实现方法-测试开发【提测平台】阶段小结(一)

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 本篇主要是对之前几次分享的阶阶段的总结,温故而知新,况且虽然看起来是一个小模块简单的增删改查操作,但其实涉及的内容点是非常的密集的,是非常 ...

  9. 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

随机推荐

  1. Ubuntu 14.10 下安装SVN

    本文主要介绍SVN独立服务器的的安装和简单配置:1.安装 # sudo apt-get install subversion 测试安装是否成功: # svnserve --version 回车显示版本 ...

  2. linux命令:cp

    1.命令介绍: cp用来复制文件或目录,全称是copy 2.命令格式: cp [选项] [-T] 源 目的 或cp [选项] 源 目录 或cp [选项] -t 目录 源 3.命令参数: -a, --a ...

  3. 对前端mvc的认识和思考

    现在,我们经常都可以看到复杂的JavaScript应用程序,由于这些应用程序变得越来越复杂,一长串的jQuery回调语句或者通过应用程序在 各个状态执行不同的函数调用,这些做法都会变得无法再让人接受, ...

  4. 解决关于打开plist文件乱码问题,plist转换为xml文件的txt文件!

    自己是程序员,干嘛不自己写代码完成?下载工具还不一定管用!具体解决方案如下: 1,获得内容 NSArray *dictionary = [NSArray arrayWithContentsOfFile ...

  5. Java 集合深入理解(6):AbstractList

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情比天蓝,来学学 AbstractList 吧! 什么是 AbstractList AbstractList 继承自 ...

  6. iOS-UITableView性能优化

    使用不透明视图.     不透明的视图可以极大地提高渲染的速度.因此如非必要,可以将table cell及其子视图的opaque属性设为YES(默认值).其中的特例包括背景色,它的alpha值应该为1 ...

  7. linux性能监控基础命令

    压力测试监控下系统性能方法之一 #top 该命令监控的是进程的信息 看图逐行意义 top:执行命令的之间 up:已经执行了277天 2users:目前有两个使用者,使用#who可以查看具体的使用者详情 ...

  8. selenium执行js报错

    selenium执行js报错 Traceback (most recent call last):    dr.execute_script(js)  File "C:\Python27\l ...

  9. ci(转)

    1  从代码管理器签出源文件 2  修改代码 3  编译代码 4  遇到错误,转到2继续修改直到达到预期 5  运行单元测试,期望所有的测试绿色(通过) 6  单元测试出错,转入2 7  重构代码,按 ...

  10. Think Python - Chapter 11 - Dictionaries

    Dictionaries A dictionary is like a list, but more general. In a list, the indices have to be intege ...