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中的filter和lambda函数的使用
Apr 07 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
May 24 Python
Python爬虫获取图片并下载保存至本地的实例
Jun 01 Python
Django+Xadmin构建项目的方法步骤
Mar 06 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
Python机器学习应用之基于线性判别模型的分类篇详解
Jan 18 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 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
img的onload的另类用法
2008/01/10 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
Python入门篇之对象类型
2014/10/17 Python
初步探究Python程序的执行原理
2015/04/11 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
竞选班长演讲稿400字
2014/08/22 职场文书
2014年招生工作总结
2014/11/26 职场文书
行政司机岗位职责
2015/04/10 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang