python pdb调试方法分享


Posted in Python onJanuary 21, 2014
import pdbdef pdb_test(arg):
    for i in range(arg):
        print(i)
    return arg
pdb.run("pdb_test(3)")
 

 b 函数名、行号:

打断点,b可以查询所有的断点。

(Pdb) b pdb_test
Breakpoint 1 at c:\users\plpcc\desktop\pdbtest.py:3
(Pdb) b
Num Type         Disp Enb   Where
   breakpoint   keep yes   at c:\users\plpcc\desktop\pdbtest.py:3
 

  c:

运行程序,直到遇到断点。

(Pdb) c
> c:\users\plpcc\desktop\pdbtest.py(4)pdb_test()
-> for i in range(arg):

   l:

     查看断点周围的代码

(Pdb) l
    import pdbB   def pdb_test(arg):
  ->      for i in range(arg):
             print(i)
       return arg
     pdb.run("pdb_test(3)")

 a:

    查看参数

(Pdb) a
arg = 3
 s, n:

    单步运行,区别s会进入路径中的函数,n不会进入

 p:

    查看表达式的值

(Pdb) p i
 condition:
 

条件断点,只有条件为true断点才命中

> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i)
(Pdb) l
    import pdb    def pdb_test(arg):
        for i in range(arg):
B->          print(i)
        return arg
    pdb.run("pdb_test(3)")
[EOF]
(Pdb) b
Num Type         Disp Enb   Where
breakpoint   keep yes   at c:\users\plpcc\desktop\pdbtest.py:5
(Pdb) condition 2 i==1   //i==1时才触发断点2
New condition set for breakpoint 2.
(Pdb) b
Num Type         Disp Enb   Where
breakpoint   keep yes   at c:\users\plpcc\desktop\pdbtest.py:5
 stop only if i==1
(Pdb) c
                    //i==0直接打印未断住
> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i)             //触发断点,i==1
(Pdb) p i

bt:

查看调用堆栈

(Pdb) bt
c:\python33\lib\bdb.py(405)run()
-> exec(cmd, globals, locals)
<string>(1)<module>()
> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i)
r:

   执行到函数返回
(Pdb) r
--Return--
> c:\users\plpcc\desktop\pdbtest.py(6)pdb_test()->3 //代码位置、函数返回值->3
-> return arg                                       //代码位置的语句
(Pdb) l
    import pdb
    def pdb_test(arg):
        for i in range(arg):
            print(i)
 ->      return arg
    pdb.run("pdb_test(3)")

通过pdb.set_trace() 在代码中指定位置嵌入一个断点,通常可以通过调试开关来控制

import pdb
__DEBUG__ = True
def pdb_test(arg):
 if True == __DEBUG__:
     pdb.set_trace()
 for i in range(arg):
     print(i)
 return arg
pdb_test(3)

运行后在pdb.set_trace()位置被断住,当__DEBUG__ = False,代码正常运行

> c:\users\plpcc\desktop\pdbtest.py(8)pdb_test()
-> for i in range(arg):
(Pdb) l
    __DEBUG__ = True    def pdb_test(arg):
        if True == __DEBUG__:
            pdb.set_trace()
 ->      for i in range(arg):
            print(i)
       return arg
   pdb_test(3)
[EOF]

通过pdb.pm()进行事后调试,可以跟踪异常程序最后的堆载信息:

Traceback (most recent call last):
File "C:\Users\plpcc\Desktop\pdbTest.py", line 13, in <module>
 pdb_test(3)
File "C:\Users\plpcc\Desktop\pdbTest.py", line 10, in pdb_test
 1/0
ZeroDivisionError: division by zero
>>> import pdb
>>> pdb.pm()
> c:\users\plpcc\desktop\pdbtest.py(10)pdb_test()
-> 1/0
(Pdb) l
    def pdb_test(arg):
        if True == __DEBUG__:
            pdb.set_trace()
        for i in range(arg):
            print(i)
->          1/0
       return arg   pdb_test(3)
Python 相关文章推荐
python实现异步回调机制代码分享
Jan 10 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
python实现封装得到virustotal扫描结果
Oct 05 Python
Python中encode()方法的使用简介
May 18 Python
Python函数返回值实例分析
Jun 08 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
python3.5绘制随机漫步图
Aug 27 Python
OpenCV 模板匹配
Jul 10 Python
python打造爬虫代理池过程解析
Aug 15 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
python发送邮件接收邮件示例分享
Jan 21 #Python
python逐行读取文件内容的三种方法
Jan 20 #Python
c++生成dll使用python调用dll的方法
Jan 20 #Python
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 #Python
python字符串加密解密的三种方法分享(base64 win32com)
Jan 19 #Python
python实现人人网登录示例分享
Jan 19 #Python
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 #Python
You might like
彻底杜绝PHP的session cookie错误
2009/08/09 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
JavaScript效率调优经验
2009/06/04 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
Python对象转JSON字符串的方法
2016/04/27 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
zookeeper python接口实例详解
2018/01/18 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
python mysql断开重连的实现方法
2019/07/26 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
网络技术专业求职信
2014/05/02 职场文书
优秀教师单行材料
2014/12/16 职场文书
学校证明范文
2015/06/24 职场文书
导游词之崇武古城
2019/10/07 职场文书