全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-19 8 分钟 ✍️ juanwangdev

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()  # 调试最近异常

常用调试命令

命令简写说明
nextn执行下一行
steps进入函数
continuec继续执行
listl显示源码
wherew显示调用栈
breakb设置断点
quitq退出调试
helph查看帮助

查看变量

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 是调试复杂问题的利器

📝 发现内容有误?点击此处直接编辑

← 上一篇 Python logging日志模块
下一篇 → Python pytest框架概览
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库