|
|
|
|
移动端

2.5.1 标准库的pdb

《Python Linux系统管理与自动化运维》第2章Python生态工具,在本章中,我们将依次介绍Python生态的各种工具,包括:Python内置的小工具(2.1节);包管理工具pip(2.2节);Linux和Windows下的Python编辑器(2.3节);Python交互式编程工具(2.4节);Python调试器(2.5节);Python代码规范检查工具(2.6节)。本节为大家介绍标准库的pdb。

作者:赖明星来源:机械工业出版社|2017-09-28 16:22

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


2.5.1 标准库的pdb

pdb是Python自带的一个库,为Python程序提供了一种交互式的源代码调试功能,包含了现代调试器应有的功能,包括设置断点、单步调试、查看源码、查看程序堆栈等。如果读者具有C或C++程序语言背景,则一定听说过gdb。gdb是由GNU开源组织发布的一个命令行程序调试工具。如果读者之前使用过gdb,那么几乎不用学习就可以直接使用pdb。pdb和gdb保持了一样的用法,这样可以降低工程师的学习负担和Python调试的难度。表2-3给出了部分pdb的调试命令。

表2-3 部分pdb调试命令

有两种不同的方法启动Python调试器,一种是直接在命令行参数指定使用pdb模块启动Python文件,如下所示:

  1. python -m pdb test_pdb.py 

另一种方法是在Python代码中调用pdb模块的set_trace方法设置一个断点。当程序运行至断点时,将会暂停执行并打开pdb调试器。

  1. #/usr/bin/python  
  2. from __future__ import print_function  
  3. import pdb  
  4.  
  5. def sum_nums(n):  
  6.     s=0 
  7.     for i in range(n):  
  8.         pdb.set_trace()  
  9.         s += i  
  10.         print(s)  
  11.  
  12. if __name__ == '__main__':  
  13.     sum_nums(5) 

两种方法并没有什么质的区别,选择使用哪一种方式主要取决于应用场景。如果程序文件较短,可以通过命令行参数的方式启动Python调试器;如果程序文件较大,则可以在需要调试的地方调用set_trace方法设置断点。无论哪一种方式都会启动Python调试器,前者将在Python源码的第一行启动Python调试器,后者会在执行到pdb.set_trace()时启动调试器。

启动Python调试器以后就可以使用前面的调试命令进行调试了。例如,在下面这段调试代码中,我们首先通过bt命令查看当前函数的调用堆栈,然后使用list命令查看我们的Python代码,之后使用p命令打印变量当前的取值,最后使用n执行下一行Python代码。

  1. $ python test_pdb.py  
  2. > test_pdb.py(9)sum_nums()  
  3. -> s += i  
  4. (Pdb) bt  
  5.   test_pdb.py(13)<module>()  
  6. -> sum_nums(5)  
  7. > test_pdb.py(9)sum_nums()  
  8. -> s += i  
  9. (Pdb) list  
  10.   4  
  11.   5     def sum_nums(n):  
  12.   6         s=0 
  13.   7         for i in range(n):  
  14.   8             pdb.set_trace()  
  15.   9  ->         s += i  
  16.  10             print(s)  
  17.  11  
  18.  12     if __name__ == '__main__':  
  19.  13         sum_nums(5)  
  20. [EOF]  
  21. (Pdb) p s  
  22. 0  
  23. (Pdb) p i  
  24. 0  
  25. (Pdb) n  
  26. > test_pdb.py(10)sum_nums()  
  27. -> print(s) 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

非常网管——网络工程案例

本书面向企业网络应用需求,详细介绍了Windows网络互联解决方案、中小企业共享上网解决方案、基于ISA Server 2006的代理服务器与防火墙解决...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊