使用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 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
Python实例分享:快速查找出被挂马的文件
Jun 08 Python
Python脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
python递归实现快速排序
Aug 18 Python
用Python实现读写锁的示例代码
Nov 05 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
Python如何批量生成和调用变量
Nov 21 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
关于Numpy之repeat、tile的用法总结
Jun 02 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
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
经验几则 推荐
2006/09/05 Javascript
ext实现完整的登录代码
2008/08/08 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
详解vue路由
2020/08/05 Javascript
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
python 日期排序的实例代码
2019/07/11 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
行政助理的职责
2013/11/14 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
医学生自荐信范文
2015/03/05 职场文书
家长反馈意见及建议
2015/06/03 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android