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 内置字符串处理函数的使用方法
Jun 11 Python
深入分析在Python模块顶层运行的代码引起的一个Bug
Jul 04 Python
几个提升Python运行效率的方法之间的对比
Apr 03 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
python获取系统内存占用信息的实例方法
Jul 17 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
Python之qq自动发消息的示例代码
Feb 18 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 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
PHP学习之数组值的操作
2011/04/17 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
js滚动条回到顶部的代码
2011/12/06 Javascript
javascript实现连续赋值
2015/08/10 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
easy_install python包安装管理工具介绍
2013/02/10 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
python增加图像对比度的方法
2019/07/12 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
python实现超级玛丽游戏
2020/03/18 Python
Pycharm调试程序技巧小结
2020/08/08 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
什么是封装
2013/03/26 面试题
2014年学生工作总结
2014/11/20 职场文书
学校党支部承诺书
2015/04/30 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
Python利用zhdate模块实现农历日期处理
2022/03/31 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL