Python中使用PDB库调试程序


Posted in Python onApril 05, 2015

Python自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。

用pdb调试有多种方式可选:

1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前

python -m pdb myscript.py

2. 在Python交互环境中启用调试
>>> import pdb

>>> import mymodule

>>> pdb.run(‘mymodule.test()')

3. 比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的

if __name__ == "__main__":

a = 1

import pdb

pdb.set_trace()

b = 2

c = a + b

print (c)

然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了

常用的调试命令

h(elp),会打印当前版本Pdb可用的命令,如果要查询某个命令,可以输入 h [command],例如:“h l” — 查看list命令
l(ist),可以列出当前将要运行的代码块

(Pdb) l

497 pdb.set_trace()

498 base_data = {}

499 new_data = {}

500 try:

501 execfile(base_file_name,{},base_data)

502 -> execfile(new_file_name,{},new_data)

503 except:

504 logger.writeLog(“error! load result log error!”)

505 print “load cmp logs error!”

506 raise Exception, “load cmp logs error!”

507

b(reak), 设置断点,例如 “b 77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点

(Pdb) b 504

Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504
condition bpnumber [condition],设置条件断点,下面语句就是对第4个断点加上条件“a==3” 

(Pdb) condition 4 a==3

(Pdb) b

Num Type Disp Enb Where

4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504

stop only if a==3

cl(ear),如果后面带有参数,就是清除指定的断点(我在Python2.4上从来没成功过!!!);如果不带参数就是清除所有的断点
(Pdb) cl

Clear all breaks? y

disable/enable,禁用/激活断点
(Pdb) disable 3

(Pdb) b

Num Type Disp Enb Where

3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505

n(ext),让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的

s(tep),跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中
c(ont(inue)),让程序正常运行,直到遇到断点
j(ump),让程序跳转到指定的行数

(Pdb) j 497

> /home/jchen/regression/regressionLogCMP.py(497)compareLog()

-> pdb.set_trace()

a(rgs),打印当前函数的参数
(Pdb) a

_logger =

_base = ./base/MRM-8137.log

_new = ./new/MRM-8137.log

_caseid = 5550001

_toStepNum = 10

_cmpMap = {‘_bcmpbinarylog': ‘True', ‘_bcmpLog': ‘True', ‘_bcmpresp': ‘True'}

p,最有用的命令之一,打印某个变量
(Pdb) p _new

u'./new/MRM-8137.log'

!,感叹号后面跟着语句,可以直接改变某个变量
q(uit),退出调试
发现在命令行下调试程序也是一件挺有意思的事情,记录下来分享一下

w ,Print a stack trace, with the most recent frame at the bottom.An arrow indicates the "current frame", which determines the context of most commands. 'bt' is an alias for this command.

d ,Move the current frame one level down in the stack trace
(to a newer frame).

u ,Move the current frame one level up in the stack trace
(to an older frame).

使用 u 和 d 命令,我们可以在栈帧之间切换,用以获取其相关上下文变量信息。w可以显示最近的一些栈帧信息。

Python 相关文章推荐
python 读取excel文件生成sql文件实例详解
May 12 Python
python 定时修改数据库的示例代码
Apr 08 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
python监控文件并且发送告警邮件
Jun 21 Python
python实现比较文件内容异同
Jun 22 Python
python循环输出三角形图案的例子
Nov 22 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
golang/python实现归并排序实例代码
Aug 30 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 Python
使用PDB模式调试Python程序介绍
Apr 05 #Python
python使用calendar输出指定年份全年日历的方法
Apr 04 #Python
python获取指定网页上所有超链接的方法
Apr 04 #Python
python中字典dict常用操作方法实例总结
Apr 04 #Python
python随机生成指定长度密码的方法
Apr 04 #Python
python统计字符串中指定字符出现次数的方法
Apr 04 #Python
python使用sorted函数对列表进行排序的方法
Apr 04 #Python
You might like
ThinkPHP文件上传实例教程
2014/08/22 PHP
浅析PHP文件下载原理
2014/12/25 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
表单验证正则表达式实例代码详解
2015/11/09 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
python getopt 参数处理小示例
2009/06/09 Python
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
Python ORM编程基础示例
2020/02/02 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
最新教师自我评价分享
2013/11/12 职场文书
专科文秘应届生求职信
2013/11/18 职场文书
关于环保的建议书
2014/05/12 职场文书
宣传标语大全
2014/07/01 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
电影雷锋观后感
2015/06/10 职场文书
少年犯观后感
2015/06/11 职场文书
房贷工资证明范本
2015/06/12 职场文书