Python公开课 - PDB调试处理

前言

如果你熟悉命令行调试工具,如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 项目中,这些调试需求比较常见,因此需要使用更为高级的调试工具。

相关阅读