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判断变量是否已经定义的方法
Aug 18 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
Python闭包思想与用法浅析
Dec 27 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
Python实现某论坛自动签到功能
Aug 20 Python
Python 支持向量机分类器的实现
Jan 15 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
Feb 28 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 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与XML的PDF文档生成技术
2006/10/09 PHP
php4的session功能评述(一)
2006/10/09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
angular4自定义组件详解
2017/09/28 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
python获取远程图片大小和尺寸的方法
2015/03/26 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
python使用turtle库绘制树
2018/06/25 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
python 监控logcat关键字功能
2020/09/04 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
2014学生会工作总结报告
2014/12/02 职场文书
委托公证书格式
2015/01/26 职场文书
公司市场部岗位职责
2015/04/15 职场文书
离婚财产分割协议书
2015/08/11 职场文书