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使用Srapy框架爬虫模拟登陆并抓取知乎内容
Jul 02 Python
Python中格式化format()方法详解
Apr 01 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
python 使用值来排序一个字典的方法
Nov 16 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 Python
使用python如何删除同一文件夹下相似的图片
May 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无限分类使用concat如何实现
2015/11/05 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
jquery重复提交请求的原因浅析
2014/05/23 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
webpack external模块的具体使用
2018/03/10 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
跟老齐学Python之用while来循环
2014/10/02 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
python实现求特征选择的信息增益
2018/12/18 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
Python 画出来六维图
2019/07/26 Python
postman和python mock测试过程图解
2020/02/22 Python
python实现对变位词的判断方法
2020/04/05 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
大四学生思想汇报
2014/01/13 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
航班延误投诉信
2015/07/02 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
springboot如何初始化执行sql语句
2021/06/22 Java/Android
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
使用CSS实现音波加载效果
2023/05/07 HTML / CSS