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 sort、sorted高级排序技巧
Nov 21 Python
python中zip和unzip数据的方法
May 27 Python
Python可变参数用法实例分析
Apr 02 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
使用pytorch和torchtext进行文本分类的实例
Jan 08 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
使用Django清空数据库并重新生成
Apr 03 Python
Python如何读写二进制数组数据
Aug 01 Python
Python实现简单的猜单词小游戏
Oct 28 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 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使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
微信小程序录音与播放录音功能
2017/12/25 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
js实现一个简易计算器
2020/03/30 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
python random从集合中随机选择元素的方法
2019/01/23 Python
python调用外部程序的实操步骤
2019/03/04 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
自荐书模板
2013/12/19 职场文书
季度思想汇报
2014/01/01 职场文书
军训学生自我鉴定
2014/02/12 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
食品安全责任书范本
2015/05/09 职场文书
单位考核鉴定意见
2015/06/05 职场文书
Python基础之数据结构详解
2021/04/28 Python
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫