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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
Python中tell()方法的使用详解
May 24 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
Python 统计字数的思路详解
May 08 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
Python 实现向word(docx)中输出
Feb 13 Python
python实现canny边缘检测
Sep 14 Python
使用gunicorn部署django项目的问题
Dec 30 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
php sybase_fetch_array使用方法
2014/04/15 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
javascript中对对层的控制
2006/12/29 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
2013/06/26 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
node 版本切换的实现
2020/02/02 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
小结Python用fork来创建子进程注意事项
2014/07/03 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
python开发之for循环操作实例详解
2015/11/12 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
10张动图学会python循环与递归问题
2021/02/06 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
优秀管理者事迹材料
2014/05/22 职场文书
生产助理岗位职责
2014/06/18 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
2015年个人思想总结
2015/03/09 职场文书
初中英语教学随笔
2015/08/15 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python