使用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 字典(Dictionary)操作详解
Mar 11 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
浅谈flask中的before_request与after_request
Jan 20 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
Python WSGI的深入理解
Aug 01 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
python属于解释语言吗
Jun 11 Python
python产生模拟数据faker库的使用详解
Nov 04 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
跟我学Laravel之视图 & Response
2014/10/15 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php实现的简单检验登陆类
2015/06/18 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
python对数组进行反转的方法
2015/05/20 Python
使用python实现个性化词云的方法
2017/06/16 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
初中科学教学反思
2014/01/21 职场文书
文明倡议书范文
2014/04/15 职场文书
大学生就业自荐书
2014/06/16 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
毕业生学校组织意见
2015/06/04 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP