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模拟enum枚举类型的方法小结
Apr 30 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
Python编程深度学习计算库之numpy
Dec 28 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
如何使用python把ppt转换成pdf
Jun 29 Python
Python 实现顺序高斯消元法示例
Dec 09 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 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在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
PHP函数积累总结
2019/03/19 PHP
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
让代码变得更易维护的7个Python库
2018/10/09 Python
Python tkinter三种布局实例详解
2020/01/06 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
先进个人获奖感言
2014/01/24 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
元旦晚会感言
2014/03/12 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
超市商业计划书
2014/05/04 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
2015年采购部工作总结
2015/04/23 职场文书