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通过smpt发送邮件的方法
Apr 30 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
简单易懂的python环境安装教程
Jul 13 Python
python的依赖管理的实现
May 14 Python
python对文件目录的操作方法实例总结
Jun 24 Python
django的model操作汇整详解
Jul 26 Python
Django实现跨域的2种方法
Jul 31 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
python模块和包的应用BASE_PATH使用解析
Dec 14 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 Python
Python 如何实现文件自动去重
Jun 02 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分页函数完整实例代码
2014/09/22 PHP
php实现复制移动文件的方法
2015/07/29 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
PHP函数积累总结
2019/03/19 PHP
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
Django rest framework基本介绍与代码示例
2018/01/26 Python
基于python实现聊天室程序
2018/07/27 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
python3实现飞机大战
2020/11/29 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
优秀团员自我评价
2015/03/10 职场文书
个人催款函范文
2015/06/24 职场文书
MySQL事务的隔离级别详情
2022/07/15 MySQL
python语言中pandas字符串分割str.split()函数
2022/08/05 Python