代码质量:异常、测试与日志

调试:bdb与pdb

Python标准库中的Debugger框架bdb模块

提供基本的调试功能,如设置断点、管理Debugger的执行等。

bdb模块的组成:

  • 异常bdb.BdbQuit(Exception)
  • 类class bdb.Breakpoint
  • 类class bdb.Bdb(skip=None)
  • 测试类class Tdb(Bdb)

Error rendering admonishment

Failed with: TOML parsing error: expected an equals, found a newline at line 1 column 5

Original markdown input:

```admonish tip title='pdb是bdb的子类
Bdb是Python Debugger的基类,实际使用的Python Debugger是其子类Pdb。
```
  • def set_trace(): 该方法用以开启调试。
  • def checkfuncname(b, frame)
  • def effective(file, line, frame): 该方法用以确定相对于该file的该line,哪个Breakpoint有效。

Python Debugger调试器

Python的一款交互式调试器,可以设置断点、单步调试、检查堆栈。

pdb模块中的Pdb类

class Pdb(bdb.Bdb, cmd.Cmd)

启动调试的方式

  • Python解释器的命令行中
# python3
import pdb

pdb.run('mymodule.mytest()')
  • 调试一个脚本文件
python3 -m pdb myscript.py
  • 在Python源代码中
import pdb;

pdb.set_trace()
# ...
pdb.pm()
# 进入调试模式

调试命令

  • h,帮助

  • w,打印堆栈

  • d,在堆栈中移动到下一级frame

  • u,在堆栈中移动到上一级frame

  • b lineno|func,在指定位置处设置断点

  • tbreak lineno|func,在指定位置处设置临时断点,执行时断点只生效一次

  • disable bp_number,禁用指定断点

  • enable bp_number,启动指定断点

  • ignore bp_number count,忽略指定断点count次

  • cl,清除所有断点

  • cl lineno|func|bp_number,清除指定位置处的断点

  • s,执行当前行,不进入被调用的函数

  • n,执行到下一行,如果调用了其他函数则执行被调用函数

  • unt,执行...直到

  • r,执行到return

  • c,继续执行

  • j lineno,跳转到指定行

  • l,

  • ll,

  • a,

  • p ,

  • pp ,

  • whatis ,

  • source ,

  • display ,

  • undisplay ,

  • run,重启代码的执行

  • restart,同run

  • q,退出调试模式

  • alias myname my_command,设置别名

  • 通常在.pdbrc文件中

  • unalias myname,取消别名

  • interact

参考资源: