使用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 相关文章推荐
使用PDB模式调试Python程序介绍
Apr 05 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
Selenium控制浏览器常见操作示例
Aug 13 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
Python创建数字列表的示例
Nov 28 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
Python自动化实战之接口请求的实现
May 30 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之第四天
2006/10/09 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
PHP重载基础知识回顾
2020/09/10 PHP
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
javascript实现评分功能
2020/06/24 Javascript
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
Python计算IV值的示例讲解
2020/02/28 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
七一党建活动方案
2014/01/28 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
学风建设演讲稿
2014/09/12 职场文书
美术教师求职信范文
2015/03/20 职场文书
小学生手册家长意见
2015/06/03 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书