使用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中利用生成器实现的并发编程
May 04 Python
python框架django基础指南
Sep 08 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
Python如何发布程序的详细教程
Oct 09 Python
浅谈python写入大量文件的问题
Nov 09 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
python实现发送form-data数据的方法详解
Sep 27 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
如何利用Python 进行边缘检测
Oct 14 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 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中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python线程创建和终止实例代码
2018/01/20 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
Python读取stdin方法实例
2019/05/24 Python
django中使用POST方法获取POST数据
2019/08/20 Python
pycharm快捷键汇总
2020/02/14 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
Java多态性的定义以及类型
2014/09/16 面试题
社区学习雷锋活动总结
2014/04/25 职场文书
促销活动计划书
2014/05/02 职场文书
宣传普通话标语
2014/06/27 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
2014年档案室工作总结
2014/12/01 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
2016年情人节广告语
2016/01/28 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS