使用PDB简单调试Python程序简明指南

 更新时间:2015年04月25日 11:47:21   投稿:junjie  
这篇文章主要介绍了使用PDB简单调试Python程序简明指南,本文讲解了使用PDB调试程序的简单技巧,方便、简洁实用,需要的朋友可以参考下

在 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)

总结

相关文章

  • Python迭代和迭代器详解

    Python迭代和迭代器详解

    本篇文章主要介绍Python的迭代和迭代器,可迭代对象的相关概念,有需要的小伙伴可以参考下
    2016-11-11
  • 详解flask入门模板引擎

    详解flask入门模板引擎

    这篇文章主要介绍了详解flask入门模板引擎,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • python爬取Ajax动态加载网页过程解析

    python爬取Ajax动态加载网页过程解析

    这篇文章主要介绍了python爬取Ajax动态加载网页过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python多线程中线程数量如何控制

    Python多线程中线程数量如何控制

    本文主要介绍了Python多线程中线程数量如何控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python中实现输入超时及如何通过变量获取变量名

    Python中实现输入超时及如何通过变量获取变量名

    这篇文章主要介绍了Python中实现输入超时以及通过变量获取变量的名字,本文给大家分享了解决思路主要是通过多线程法实现,需要的朋友可以参考下
    2020-01-01
  • python利用跳板机ssh远程连接redis的方法

    python利用跳板机ssh远程连接redis的方法

    今天小编就为大家分享一篇python利用跳板机ssh远程连接redis的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • 解决Python使用列表副本的问题

    解决Python使用列表副本的问题

    今天小编就为大家分享一篇解决Python使用列表副本的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • pandas to_excel 添加颜色操作

    pandas to_excel 添加颜色操作

    这篇文章主要介绍了pandas to_excel 添加颜色操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python Fire实现自动生成命令行接口

    Python Fire实现自动生成命令行接口

    命令行程序是平时写一些小工具时最常用的方式,随着命令行程序功能的丰富,也就是参数多了以后,解析和管理参数之间的关系会变得越来越繁重,而本次介绍的 Fire 库正好可以解决这个问题,下面我们就来看看具体实现方法吧
    2023-09-09
  • django如何自定义manage.py管理命令

    django如何自定义manage.py管理命令

    这篇文章主要介绍了django如何自定义manage.py管理命令,帮助大家更好的理解和学习使用django框架,感兴趣的朋友可以了解下
    2021-04-04

最新评论