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压缩和解压缩zip文件
Feb 14 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
深入学习Python中的装饰器使用
Jun 20 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
Python装饰器用法实例分析
Jan 14 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
Python 实现交换矩阵的行示例
Jun 26 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
Windows安装Anaconda3的方法及使用过程详解
Jun 11 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
第五节 克隆 [5]
2006/10/09 PHP
PHP 程序员应该使用的10个组件
2009/10/31 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
javascript一点特殊用法
2008/05/28 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
Keras设置以及获取权重的实现
2020/06/19 Python
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
医学生职业规划范文
2014/01/05 职场文书
学习党章思想汇报
2014/01/07 职场文书
校园活动宣传方案
2014/03/28 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
新员工入职欢迎词
2015/01/23 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
计算机实训心得体会
2016/01/14 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
八年级语文教学反思
2016/03/03 职场文书
Mysql Show Profile
2021/04/05 MySQL
Python中的套接字编程是什么?
2021/06/21 Python