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检测lvs real server状态
Jan 22 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
python自动发送邮件脚本
Jun 20 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
python实现简单的单变量线性回归方法
Nov 08 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
在Python中字典按值排序的实现方法
Nov 12 Python
Python脚本调试工具安装过程
Jan 11 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中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
PHP加密技术的简单实现
2016/09/04 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
jquery中获取select选中值的代码
2011/06/27 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
js实现随机点名程序
2020/09/17 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
Python 异常处理的实例详解
2017/09/11 Python
详解Python3中ceil()函数用法
2019/02/19 Python
对Django外键关系的描述
2019/07/26 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
给老婆的检讨书
2015/01/27 职场文书
单位工作证明范本
2015/06/15 职场文书
子女赡养老人协议书
2016/03/23 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
关于python中模块和重载的问题
2021/11/02 Python
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL