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获取电脑硬件信息及状态的实现方法
Aug 29 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
django1.8使用表单上传文件的实现方法
Nov 04 Python
Python pymongo模块常用操作分析
Sep 01 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
浅析Python 引号、注释、字符串
Jul 25 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 Python
python怎么自定义捕获错误
Jun 29 Python
python 使用建议与技巧分享(四)
Aug 18 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 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 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
php两种无限分类方法实例
2015/04/21 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
JS 对象介绍
2010/01/20 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python实现杨辉三角思路
2017/07/14 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
pandas的resample重采样的使用
2020/04/24 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
可靠的数据流传输TCP
2016/03/15 面试题
幼师自荐信
2013/10/26 职场文书
保险专业自荐信范文
2014/02/20 职场文书
西式结婚主持词
2014/03/14 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
员工合理化建议书
2014/05/19 职场文书
经营理念标语
2014/06/21 职场文书
公司委托书范本5篇
2014/09/20 职场文书
购房委托书
2014/10/15 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis