Python pdb调试器
pdb 提供交互式调试能力,可在代码任意位置暂停检查状态。
启动调试
Python
import pdb
# 代码中插入断点
def buggy_function():
x = 10
y = 0
pdb.set_trace() # 在此暂停
result = x / y
return result
buggy_function()
命令行启动
Bash
# 调试脚本
python -m pdb script.py
# 从错误处开始调试
python -i script.py # 发生错误后
import pdb
pdb.pm() # 调试最近异常
常用调试命令
| 命令 | 简写 | 说明 |
|---|---|---|
| next | n | 执行下一行 |
| step | s | 进入函数 |
| continue | c | 继续执行 |
| list | l | 显示源码 |
| where | w | 显示调用栈 |
| break | b | 设置断点 |
| quit | q | 退出调试 |
| help | h | 查看帮助 |
查看变量
Python
# 在 pdb 交互中
(Pdb) p x # 打印变量 x
(Pdb) pp locals() # 美化打印所有局部变量
(Pdb) pp globals() # 美化打印所有全局变量
(Pdb) whatis x # 显示变量类型
(Pdb) display x # 每步自动显示 x 的值
(Pdb) undisplay x # 取消自动显示
设置断点
Python
# pdb 中设置断点
(Pdb) break 10 # 在第10行设置断点
(Pdb) break func_name # 在函数入口设置断点
(Pdb) break file.py:20 # 在指定文件行设置断点
(Pdb) break # 显示所有断点
(Pdb) clear 1 # 清除第1号断点
(Pdb) disable 1 # 禁用第1号断点
(Pdb) enable 1 # 启用第1号断点
条件断点
Python
(Pdb) break 10, x > 5 # 当 x > 5 时在第10行断点
(Pdb) break func, y == 0 # 当 y == 0 时在函数断点
执行控制
Python
(Pdb) n # next:执行下一行(不进入函数)
(Pdb) s # step:执行下一行(进入函数)
(Pdb) c # continue:继续执行到下一个断点
(Pdb) r # return:执行到函数返回
(Pdb) unt 20 # until:执行到第20行
(Pdb) j 10 # jump:跳转到第10行
查看调用栈
Python
(Pdb) w # where:显示完整调用栈
(Pdb) u # up:向上移动栈帧
(Pdb) d # down:向下移动栈帧
(Pdb) bt # backtrace:显示调用栈
查看源码
Python
(Pdb) l # list:显示当前位置前后代码
(Pdb) l 10, 20 # 显示第10-20行
(Pdb) ll # longlist:显示当前函数全部代码
(Pdb) source func # 显示函数源码
修改变量
Python
(Pdb) x = 5 # 在调试中修改变量值
(Pdb) !x = 5 # ! 前缀确保执行语句而非命令
(Pdb) a # args:显示当前函数参数
调试示例
Python
import pdb
def calculate(a, b):
result = a + b
pdb.set_trace() # 断点
if result > 10:
result = result * 2
return result
# 运行后进入 pdb
# (Pdb) p a
# 5
# (Pdb) p b
# 3
# (Pdb) p result
# 8
# (Pdb) n # 执行下一行
# (Pdb) c # 继续
调试技巧
Python
# 临时调试代码
def debug_info():
import pdb
pdb.set_trace()
# 断点后直接执行表达式
(Pdb) !print([x for x in range(10)])
# 交互式调试
(Pdb) interact # 进入完整 Python 交互环境
Python 3.7+ breakpoint()
Python
def new_feature():
x = 10
breakpoint() # Python 3.7+ 简写
result = x * 2
return result
# 禁用断点
PYTHONBREAKPOINT=0 python script.py
# 使用其他调试器
PYTHONBREAKPOINT=ipdb.set_trace python script.py
要点总结
pdb.set_trace()在代码中设置断点-m pdb命令行启动调试脚本n下一步,s进入函数,c继续p var打印变量,pp美化打印b line设置断点,可加条件l查看源码,w查看调用栈u/d在调用栈中移动- Python 3.7+ 可用
breakpoint()简写 - pdb 是调试复杂问题的利器
📝 发现内容有误?点击此处直接编辑