Python内置的pdb调试器是排查代码问题的实用工具,无需额外安装就能使用,支持断点设置、单步执行、变量查看等核心调试功能,能替代低效的print调试方式。

pdb的启动方式
常用的启动pdb的方式有两种,分别是命令行启动和在代码中嵌入启动。
命令行启动
如果已经写好了Python脚本,可以在终端直接通过-m pdb参数启动调试,执行后会进入调试交互模式,程序会在第一行代码处暂停。
# 假设要调试的脚本是test.py python -m pdb test.py
代码中嵌入启动
也可以在代码的指定位置插入pdb.set_trace()语句,程序运行到该位置时会自动进入调试模式。
import pdb
def add(a, b):
pdb.set_trace() # 程序运行到这里会暂停进入调试
result = a + b
return result
print(add(1, 2))
常用调试命令
进入pdb调试模式后,可以通过输入命令控制调试流程,以下是高频使用的命令:
| 命令 | 缩写 | 功能说明 |
|---|---|---|
| next | n | 执行下一行代码,遇到函数调用不会进入函数内部 |
| step | s | 执行下一行代码,遇到函数调用会进入函数内部 |
| break | b | 设置断点,可指定行号或者函数名 |
| continue | c | 继续执行程序,直到遇到下一个断点或者程序结束 |
| p | 打印指定变量或者表达式的值 | |
| list | l | 列出当前位置周围的代码 |
| quit | q | 退出调试模式 |
完整调试示例
下面通过一个存在逻辑错误的函数演示完整的pdb调试流程,函数原本要实现计算列表元素的平均值,但返回结果错误。
import pdb
def calc_average(num_list):
total = 0
# 这里故意写错了循环范围,后面通过调试发现问题
for i in range(len(num_list) - 1):
total += num_list[i]
average = total / len(num_list)
return average
if __name__ == "__main__":
pdb.set_trace()
test_list = [1, 2, 3, 4, 5]
result = calc_average(test_list)
print(f"平均值是: {result}")
运行上述代码后进入调试模式,依次执行以下操作:
- 输入
n执行到调用calc_average函数的位置 - 输入
s进入calc_average函数内部 - 输入
b 8在第8行设置断点,然后输入c跳到断点位置 - 输入
p total查看total的值,发现只累加了前4个元素,缺少最后一个元素 - 输入
q退出调试,修改循环的range(len(num_list) - 1)为range(len(num_list)),问题解决
注意事项
使用pdb时需要注意,在Python 3.7及以上版本中,还可以直接使用内置的breakpoint()函数替代pdb.set_trace(),功能完全一致,写法更简洁。另外,调试过程中如果要查看对象的属性,可以直接用p 对象名.__dict__打印对象的属性字典,方便排查属性赋值错误的问题。
调试完成后记得删除代码中嵌入的pdb.set_trace()或者breakpoint()语句,避免影响程序正常运行。
pdbPython_debugbreakpointstep_debug修改时间:2026-06-18 02:48:48