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实现下载网易云音乐的高清MV
Mar 16 Python
python实现清屏的方法
Apr 30 Python
python写入并获取剪切板内容的实例
May 31 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
Jun 24 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
python numpy 按行归一化的实例
Jan 21 Python
Python中Subprocess的不同函数解析
Dec 10 Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
基于PyQT实现区分左键双击和单击
May 19 Python
python下对hsv颜色空间进行量化操作
Jun 04 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/10 PHP
php操作redis缓存方法分享
2015/06/03 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
php微信支付接口开发程序
2016/08/02 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
jquery处理json数据实例分析
2014/06/03 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python中format()格式输出全解
2019/04/12 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Python各种扩展名区别点整理
2020/02/27 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
法律专业自我鉴定
2013/10/03 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
二年级数学教学反思
2016/02/16 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle