设为首页 收藏本站
查看: 823|回复: 0

[经验分享] 用PDB库调试Python程序

[复制链接]

尚未签到

发表于 2015-4-21 12:59:43 | 显示全部楼层 |阅读模式
  用pdb调试有多种方式可选:
  1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前   
python -m pdb myscript.py
  2. 在Python交互环境中启用调试   
>>> import pdb   
>>> import mymodule   
>>> pdb.run(‘mymodule.test()’)
  在 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 Bsum = 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 Bdef 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)
总结
  命令
用途
  break 或 b
设置断点
  continue 或 c
继续执行程序
  list 或 l
查看当前行的代码段
  step 或 s
进入函数
  return 或 r
执行代码直到从当前函数返回
  exit 或 q
中止并退出
  next 或 n
执行下一行
  pp
打印变量的值
  help
帮助
  参考自:http://www.vpsee.com/2009/09/debug-python-programwith-pdb/
  http://magustest.com/blog/python/use-pdb-debug-python/
  http://linhs.blog.iyunv.com/370259/125323

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59259-1-1.html 上篇帖子: Python的zip函数 下篇帖子: 优雅的使用python之环境管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表