使用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中多线程thread与threading的实现方法
Aug 18 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
Python实现的双色球生成功能示例
Dec 18 Python
Python爬虫实现验证码登录代码实例
May 10 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
基于matplotlib xticks用法详解
Apr 16 Python
PyQt5实现登录页面
May 30 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
Feb 25 Python
python中%格式表达式实例用法
Jun 18 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
计数器详细设计
2006/10/09 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
javascript 函数式编程
2007/08/16 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
使用python实现rsa算法代码
2016/02/17 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
python爬取个性签名的方法
2018/06/17 Python
python使用turtle库绘制时钟
2020/03/25 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
Python pip使用超时问题解决方案
2020/08/03 Python
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
计算机专业大学生的自我评价
2013/11/14 职场文书
初中女生自我鉴定
2013/12/19 职场文书
顶撞老师检讨书
2014/02/07 职场文书
高中物理教学反思
2014/02/08 职场文书
社会实践活动总结报告
2014/04/29 职场文书
离婚协议书范本样本
2014/08/19 职场文书
导师工作推荐信
2015/03/27 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电