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 相关文章推荐
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
keras自定义损失函数并且模型加载的写法介绍
Jun 15 Python
Python如何将模块打包并发布
Aug 30 Python
python批量修改文件名的示例
Sep 27 Python
Python eval函数原理及用法解析
Nov 14 Python
Python基于execjs运行js过程解析
Nov 27 Python
PyTorch device与cuda.device用法
Apr 03 Python
如何利用python创作字符画
Jun 25 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
浅析PHP绘图技术
2013/07/03 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
python中join()方法介绍
2018/10/11 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
Python3 翻转二叉树的实现
2019/09/30 Python
pycharm显示远程图片的实现
2019/11/04 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
收银员的岗位职责范本
2014/02/04 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
老乡聚会通知
2015/04/23 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书