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 接口返回的json字符串实例
Mar 27 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
python实现飞机大战
Sep 11 Python
Python实现程序判断季节的代码示例
Jan 28 Python
Python TestCase中的断言方法介绍
May 02 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
python代码实现图书管理系统
Nov 30 Python
pandas中对文本类型数据的处理小结
Nov 01 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执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
document.getElementBy("id")与$("#id")有什么区别
2013/09/22 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
2015/12/03 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
Python实现字符串格式化输出的方法详解
2017/09/20 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
老生常谈python中的重载
2018/11/11 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
HTML5实现签到 功能
2018/10/09 HTML / CSS
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
采购部部门职责
2013/12/15 职场文书
党员个人思想汇报
2013/12/28 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS