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 itchat实现微信自动回复的示例代码
Aug 14 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
Python socket 套接字实现通信详解
Aug 27 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
Python 列表的清空方式
Jan 13 Python
python 5个实用的技巧
Sep 27 Python
Python中的xlrd模块使用整理
Jun 15 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
php curl常用的5个经典例子
2017/01/20 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
javascript[js]获取url参数的代码
2007/10/17 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
python制作简单五子棋游戏
2019/06/18 Python
python3获取当前目录的实现方法
2019/07/29 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
jupyter notebook实现显示行号
2020/04/13 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
python学习笔记之多进程
2020/08/06 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
气象学专业个人求职信
2014/03/15 职场文书
市场营销专业求职信
2014/06/17 职场文书
投资入股合作协议书
2014/10/28 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
zabbix配置nginx监控的实现
2022/05/25 Servers
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers