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爬虫框架talonspider简单介绍
Jun 09 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
Python实现的特征提取操作示例
Dec 03 Python
python os模块简单应用示例
May 23 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
python读取Kafka实例
Dec 23 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
pycharm快捷键汇总
Feb 14 Python
python函数map()和partial()的知识点总结
May 26 Python
Python命名空间及作用域原理实例解析
Aug 12 Python
python中绕过反爬虫的方法总结
Nov 25 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下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
php字符串过滤与替换小结
2015/01/26 PHP
ECMAScript 基础知识
2007/06/29 Javascript
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
pandas 小数位数 精度的处理方法
2018/06/09 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
python数据爬下来保存的位置
2020/02/17 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
家长写给老师的建议书
2014/03/13 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
2014年医生工作总结
2014/11/21 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
学习计划是什么
2019/04/30 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
MySQL日期时间函数知识汇总
2022/03/17 MySQL