使用PDB简单调试Python程序简明指南


Posted in Python onApril 25, 2015

在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py):

$ vi d.py

#!/usr/bin/python
def main():

        i, sum = 1, 0

        for i in xrange(100):

                sum = sum + i

        print sum
if __name__ == '__main__':

        main()
$ python -m pdb d.py

运行上面的命令后进入以下界面,可以输入类似 gdb 的命令来改变程序的执行流程:
$ python -m pdb 1.py 

> d.py(3)()

-> def main():

(Pdb)

list 显示程序的最近代码段:
(Pdb) list

  1   #!/usr/bin/python

  2   

  3  -> def main():

  4    i, sum = 1, 0

  5    for i in xrange(100):

  6     sum = sum + i

  7    print sum

  8    

  9   if __name__ == '__main__':

 10    main()

[EOF]

next 或者 n 执行下一行代码:
(Pdb) next

> d.py(9)()

-> if __name__ == '__main__':

用 break 在第6行设置一个断点:
(Pdb) break d.py:6

Breakpoint 1 at d.py:6
(Pdb) list

  1   #!/usr/bin/python

  2   

  3   def main():

  4    i, sum = 1, 0

  5  ->  for i in xrange(100):

  6 B   sum = sum + i

  7    print sum

  8    

  9   if __name__ == '__main__':

 10    main()

[EOF]

如果想在函数处设置断点:
(Pdb) break d.main

d.py:3
(Pdb) list

  1   #!/usr/bin/python

  2   

  3 B def main():

  4  ->  i, sum = 1, 0

  5    for i in xrange(100):

  6     sum = sum + i

  7    print sum

  8    

  9   if __name__ == '__main__':

 10    main()

[EOF]

还可以给断点加条件,比如设置条件只有当 sum > 50 的时候才 break:
(Pdb) break d.py:6, sum > 50

Breakpoint 1 at d.py:6

如果想查看某个变量的值,可以用 pp 命令打印出来:
(Pdb) step

> d.py(5)main()

-> for i in xrange(100):

(Pdb) pp sum

0

可以直接在程序里使用 pdb 模块,import pdb 后 pdb.set_trace():
#!/usr/bin/python

import pdb
def main():

        i, sum = 1, 0

        for i in xrange(100):

                sum = sum + i

        pdb.set_trace()

        print sum
if __name__ == '__main__':

        main()

这样只要运行程序 ./d.py 就可以直接运行到 print sum 处:
$ ./d.py 

> d.py(9)main()

-> print sum

(Pdb)

总结

使用PDB简单调试Python程序简明指南

Python 相关文章推荐
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
python发送邮件脚本
May 22 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
python导入pandas具体步骤方法
Jun 23 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
如何将json数据转换为python数据
Sep 04 Python
python打包生成so文件的实现
Oct 30 Python
Django URL参数Template反向解析
Nov 24 Python
Python脚本判断 Linux 是否运行在虚拟机上
Apr 25 #Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 #Python
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 #Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 #Python
安装Python的web.py框架并从hello world开始编程
Apr 25 #Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 #Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 #Python
You might like
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
分享3个php获取日历的函数
2015/09/25 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
用python读写excel的方法
2014/11/18 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
简单了解python PEP的一些知识
2019/07/13 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
opencv python图像梯度实例详解
2020/02/04 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
一份全面的PHP面试问题考卷
2012/07/15 面试题
生物技术专业毕业生求职信范文
2013/12/14 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
网站创业计划书
2014/04/30 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
Python如何使用循环结构和分支结构
2022/04/13 Python
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers