前言
如果你熟悉命令行调试工具,如GDB,那么使用Python中的PDB将获得非常好的体验,PDB不仅支持项目启动时进行调用,也支持在Python shell中交互式调试
它为Python程序定义了一个交互式源代码调试器。它支持在源代码行级别设置条件断点、单步执行,堆栈检查,源码列表以及在任何堆栈帧的上下文查看。
用Pdb调试有多种方式
命令行加-m参数
命令行启动目标程序,加上-m参数,这样调用 testPdb.py的话断点就是程序执行的第一行之前
python -m pdb test.py
在python交互环境调试
>>> import pdb
>>> import test
>>> pdb.run('test.test()')
代码中插入一段程序
比较常用的,就是在程序中间插入一段程序,相对于在一般 IDE 里面打上断点然后启动 debug,不过这种方式是 hardcode的
if __name__ == "__main__":
a = 1
import pdb
pdb.set_trace()
b = 2
c = a + b
print(c)
常用的命令
- break: b, 设置断点
- continue: c, 继续执行程序
- list: l, 查看当前行的代码段
- step: s, 进入函数
- return: r, 执行代码直到从当前函数返回
- quit: q, 中止并退出
- next: n, 执行下一行
- print: p, 打印变量的值
- help: h, 帮助
- args: a, 查看传入参数
- clear num: 删除指定断点
- bt: 查看函数调用栈帧
总结
pdb 调试有个明显的缺陷就是对于多线程,远程调试等支持得不够好,同时没有较为直观的界面显示,不太适合大型的 python 项目。而在较大的 python 项目中,这些调试需求比较常见,因此需要使用更为高级的调试工具。
原文地址
网友评论