Pdb简介
pdb为Python程序定义了一个交互式源代码调试器。它支持在源代码行级别设置(条件)断点和单步执行,检查堆栈框架,源代码列表以及在任何堆栈框架的上下文中评估任意Python代码。它还支持事后调试,可以在程序控制下调用。
调试器是可扩展的–实际上定义为class Pdb
。目前尚无记录,但通过阅读源代码很容易理解。扩展接口使用模块bdb
和cmd
。
调试器的提示是(Pdb)。在调试器的控制下运行程序的典型用法是:
>>>
>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
> <string>(0)?()
(Pdb) continue
> <string>(1)?()
(Pdb) continue
NameError: 'spam'
> <string>(1)?()
(Pdb)
在版本3.3中进行了更改:通过readline模块的制表符补全可用于命令和命令自变量,例如,将当前的全局名和本地名作为p命令的自变量提供。
pdb.py
也可以作为脚本调用以调试其他脚本。例如:
python3 -m pdb myscript.py
当作为脚本调用时,如果要调试的程序异常退出,pdb将自动进入事后调试。在事后调试之后(或在程序正常退出之后),pdb将重新启动程序。自动重启会保留pdb的状态(例如断点),并且在大多数情况下比在程序退出时退出调试器更为有用。
3.2版中的新功能:pdb.py
现在接受一个-c
选项,该选项可以像在.pdbrc
文件中给出的那样执行命令,请参阅下文调试器命令。
版本3.7中的新增功能:pdb.py
现在接受与-m
模块执行方式类似的选项 。与脚本一样,调试器将在模块第一行之前暂停执行。python3 -m
从正在运行的程序进入调试器的典型用法是插入
import pdb; pdb.set_trace()
在您想进入调试器的位置。然后,您可以单步执行此语句之后的代码,并使用该continue命令在没有调试器的情况下继续运行。
3.7版的新功能:breakpoint()
当使用默认值调用内置函数时,它可以代替。import pdb; pdb.set_trace()
检查崩溃程序的典型用法是:
>>>
>>> import pdb
>>> import mymodule
>>> mymodule.test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "./mymodule.py", line 4, in test
test2()
File