使用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语言的12个基础知识点小结
Jul 10 Python
Python set集合类型操作总结
Nov 07 Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
利用python批量检查网站的可用性
Sep 09 Python
Python虚拟环境项目实例
Nov 20 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
python爬虫刷访问量 2019 7月
Aug 01 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 Python
python实现梯度法 python最速下降法
Mar 24 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
全网最全python库selenium自动化使用详细教程
Jan 12 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
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
php邮件发送的两种方式
2020/04/28 PHP
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
python实现爬虫下载漫画示例
2014/02/16 Python
Python编程之多态用法实例详解
2015/05/19 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
Python中的pack和unpack的使用
2018/03/12 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
python中的常量和变量代码详解
2018/07/25 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
广告学专业应届生求职信
2013/10/01 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
欢迎横幅标语
2014/06/17 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
坎儿井导游词
2015/02/09 职场文书
小学少先队活动总结
2015/05/08 职场文书
2015党建工作简报
2015/07/21 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书