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实现颜色rgb和hex相互转换的函数
Mar 19 Python
Python的Django框架中settings文件的部署建议
May 30 Python
python出现"IndentationError: unexpected indent"错误解决办法
Oct 15 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
python如何实现代码检查
Jun 28 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
python和node.js生成当前时间戳的示例
Sep 29 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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
深入file_get_contents与curl函数的详解
2013/06/25 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python梯度下降算法的实现
2020/02/24 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
上海方立数码笔试题
2013/10/18 面试题
党委书记岗位职责
2013/11/24 职场文书
婚纱店策划方案
2014/05/22 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
个人工作表现自我评价
2015/03/06 职场文书
终止劳动合同通知书
2015/04/16 职场文书
严以用权学习心得体会
2016/01/12 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
python处理json数据文件
2022/04/11 Python