python pdb调试方法分享

 更新时间:2014年01月21日 09:24:43   作者:  
在交互环境中通常使用pdb.run来调试,下面学习一下使用方法,大家参考使用吧

复制代码 代码如下:

import pdb

def 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 pdb

B   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使用captcha库制作带参数输入验证码案例

    Python使用captcha库制作带参数输入验证码案例

    这篇文章主要介绍了Python使用captcha库制作验证码,带参数输入,本文通过实例案例解析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Python 调用GPT-3 API实现过程详解

    Python 调用GPT-3 API实现过程详解

    这篇文章主要为大家介绍了Python 调用GPT-3 API实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Python类的常用高级函数汇总

    Python类的常用高级函数汇总

    这篇文章主要介绍了Python类的常用高级函数汇总,文章围绕python类函数展开详细内容,具有一的的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-03-03
  • 浅谈ROC曲线的最佳阈值如何选取

    浅谈ROC曲线的最佳阈值如何选取

    今天小编就为大家分享一篇浅谈ROC曲线的最佳阈值如何选取,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 使用Python的Flask框架来搭建第一个Web应用程序

    使用Python的Flask框架来搭建第一个Web应用程序

    Flask框架是一个以轻量级著称的Web开发框架,近两年来在Web领域获得了极高的人气,这里我们就来看如何使用Python的Flask框架来搭建第一个Web应用程序
    2016-06-06
  • python中的错误如何查看

    python中的错误如何查看

    在本篇文章里小编给大家整理的是关于python中的错误如何查看的方法,需要的朋友们可以学习下。
    2020-07-07
  • Pyhton中单行和多行注释的使用方法及规范

    Pyhton中单行和多行注释的使用方法及规范

    大家都知道python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也是常用的。python注释也有自己的规范,这篇文章文章中会给大家详细介绍Pyhton中单行和多行注释的使用方法及规范,有需要朋友们可以参考借鉴。
    2016-10-10
  • python3 写一个WAV音频文件播放器的代码

    python3 写一个WAV音频文件播放器的代码

    本文通过实例代码给大家介绍了python3 写一个WAV音频文件播放器,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 尝试用最短的Python代码来实现服务器和代理服务器

    尝试用最短的Python代码来实现服务器和代理服务器

    "人生苦短、我用Python",Python最大的特点便是代码简洁,得益于Python自带的wsgiref包和socket模块,这里我们将尝试用最短的Python代码来实现服务器和代理服务器:
    2016-06-06
  • Python之字符串的遍历的4种方式

    Python之字符串的遍历的4种方式

    这篇文章主要介绍了Python之字符串的遍历的4种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论