使用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中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
用Python遍历C盘dll文件的方法
May 06 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
python中import学习备忘笔记
Jan 24 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
Python编写登陆接口的方法
Jul 10 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
对python产生随机的二维数组实例详解
Dec 13 Python
python输出pdf文档的实例
Feb 13 Python
python压包的概念及实例详解
Feb 17 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
当海贼王变成JOJO风
2020/03/02 日漫
PHP实现的进度条效果详解
2016/05/03 PHP
php文件系统处理方法小结
2016/05/23 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
超级退弹代码
2008/07/07 Javascript
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
js点击选择文本的方法
2015/02/09 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Python文件路径名的操作方法
2019/10/30 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
18岁生日感言
2014/01/12 职场文书
七年级地理教学反思
2014/01/26 职场文书
财务会计自荐信范文
2014/02/21 职场文书
阳光体育活动总结
2014/04/30 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
转让协议书范本
2014/09/13 职场文书
暑期实践个人总结
2015/03/06 职场文书