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读取配置文件模块ConfigParser
May 11 Python
python3中的md5加密实例
May 29 Python
python实现自动发送报警监控邮件
Jun 21 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
对python实现二维函数高次拟合的示例详解
Dec 29 Python
int在python中的含义以及用法
Jun 27 Python
django中forms组件的使用与注意
Jul 08 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
Jan 15 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
js实现简单点赞操作
2020/03/17 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
python 多线程串行和并行的实例
2019/02/22 Python
python3安装crypto出错及解决方法
2019/07/30 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Python 去除字符串中指定字符串
2020/03/05 Python
python利用platform模块获取系统信息
2020/10/09 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
户外活动总结范文
2014/04/30 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
电影地道战观后感
2015/06/04 职场文书
尊师重教主题班会
2015/08/14 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
vue+element ui实现锚点定位
2021/06/29 Vue.js
Java spring单点登录系统
2021/09/04 Java/Android
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS