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实现二分法算法实例
Feb 02 Python
python中偏函数partial用法实例分析
Jul 08 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
python读写配置文件操作示例
Jul 03 Python
Python画图高斯分布的示例
Jul 10 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
vue常用指令代码实例总结
Mar 16 Python
Python中socket网络通信是干嘛的
May 27 Python
python opencv通过按键采集图片源码
May 20 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 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学习笔记 类的声明与对象实例化
2011/06/13 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
PHP会话处理的10个函数
2015/08/11 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
Python线程threading模块用法详解
2020/02/26 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
统计员岗位职责
2013/11/14 职场文书
2014年团总支工作总结
2014/11/21 职场文书
公司地址变更通知
2015/04/25 职场文书
小学安全教育主题班会
2015/08/12 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Django REST framework 限流功能的使用
2021/06/24 Python
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs