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中Flask框架简单入门实例
Mar 21 Python
python获取局域网占带宽最大3个ip的方法
Jul 09 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
python实现的自动发送消息功能详解
Aug 15 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
python自动脚本的pyautogui入门学习
Apr 01 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 Python
运行Python编写的程序方法实例
Oct 21 Python
Python中Qslider控件实操详解
Feb 20 Python
深度学习tensorflow基础mnist
Apr 14 Python
Python实现生活常识解答机器人
Jun 28 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 curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
PHP goto语句用法实例
2019/08/06 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
python requests使用socks5的例子
2019/07/25 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
致长跑运动员广播稿
2014/01/31 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
行政专员的岗位职责
2014/03/10 职场文书
护士长竞聘书
2014/03/31 职场文书
搞笑老公保证书
2015/02/26 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
教育教学读书笔记
2015/07/02 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
《风筝》教学反思
2016/02/23 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android