使用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显示进度条的方法
Sep 20 Python
在Python的Django框架中显示对象子集的方法
Jul 21 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 Python
Python 硬币兑换问题
Jul 29 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
解决jupyter notebook 出现In[*]的问题
Apr 13 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
php实现httpRequest的方法
2015/03/13 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
jQuery参数列表集合
2011/04/06 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
JS常用算法实现代码
2016/11/14 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
python正则表达式match和search用法实例
2015/03/26 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
python3.4爬虫demo
2019/01/22 Python
python hough变换检测直线的实现方法
2019/07/12 Python
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
初中生期末评语大全
2014/04/24 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
法人代表证明书格式
2014/10/01 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript