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 urlopen()函数 示例分享
Jun 12 Python
python中解析json格式文件的方法示例
May 03 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
python操作excel文件并输出txt文件的实例
Jul 10 Python
selenium+python自动化测试之多窗口切换
Jan 23 Python
Python检查ping终端的方法
Jan 26 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
python如何绘制疫情图
Sep 16 Python
python matlab库简单用法讲解
Dec 31 Python
Python Selenium异常处理的实例分析
Feb 28 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 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的urlencode()URL编码函数浅析
2011/08/09 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python的argparse库使用详解
2018/10/09 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
给排水工程师岗位职责
2013/11/21 职场文书
培训班主持词
2014/03/28 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
个人收入证明范本
2015/06/12 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python