使用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 06 Python
Python中的字典与成员运算符初步探究
Oct 13 Python
python笔记:mysql、redis操作方法
Jun 28 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
python爬虫基础知识点整理
Jun 02 Python
python自定义函数def的应用详解
Jun 03 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 Python
Python实现位图分割的效果
Nov 20 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实现无限级分类
2014/12/24 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
ie 调试javascript的工具
2009/04/29 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
简单的js计算器实现
2016/10/26 Javascript
原生js实现轮播图
2017/02/27 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python基础教程之五种数据类型详解
2017/01/12 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
python flask实现分页的示例代码
2018/08/02 Python
应届毕业生个人求职信范文
2014/01/29 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
李敖北大演讲稿
2014/05/24 职场文书
美术专业自荐信
2014/07/07 职场文书
八年级语文教学反思
2016/03/03 职场文书
js实现自动锁屏功能
2021/06/02 Javascript
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python
python实现层次聚类的方法
2021/11/01 Python
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫