Python调试神器:Pdb命令速查手册
Pdb 调试命令速查表
基础命令
查看代码
l # 显示当前位置附近的代码(11行)
ll # 显示当前函数的完整代码
w # 显示调用栈(where)
list 10, 20 # 显示第10-20行代码
执行控制
n # 下一步(next),不进入函数
s # 单步执行(step),进入函数内部
c # 继续执行(continue),直到下一个断点
r # 继续执行直到当前函数返回(return)
unt # 继续执行直到行号大于当前行
q # 退出调试(quit)
查看变量
p 变量名 # 打印变量值(print)
pp 变量名 # 漂亮打印(pretty print),格式化输出
p locals() # 查看所有局部变量
p globals() # 查看所有全局变量
p dir(对象) # 查看对象的所有属性和方法
常用变量查看示例
p state # 查看 state 对象
p state[“context”] # 查看 context 字典
p state[“context”].keys() # 查看 context 的所有键
pp state[“context”] # 格式化打印 context
p state[“context”][“categories”] # 查看 categories 列表
p len(state[“context”][“categories”]) # 查看列表长度
调用栈导航
w # 显示当前调用栈
up # 移动到上一层调用栈
down # 移动到下一层调用栈
bt # 显示完整的回溯信息(backtrace)
断点管理
b # 显示所有断点
b 行号 # 在指定行设置断点
b 文件名:行号 # 在指定文件的指定行设置断点
b 函数名 # 在函数入口设置断点
cl # 清除所有断点
cl 断点编号 # 清除指定断点
disable 断点编号 # 禁用断点
enable 断点编号 # 启用断点
条件断点
b 行号, 条件表达式 # 设置条件断点
示例:b 100, x > 10
表达式执行
!表达式 # 强制执行 Python 表达式(避免与 Pdb 命令冲突)
示例:!c = 100 (如果变量名是 c,会和 continue 命令冲突)
帮助
h # 显示帮助
h 命令名 # 显示特定命令的帮助
示例:h p
实用技巧
1. 查看复杂数据结构
pp state[“context”] # 格式化打印整个 context
p list(state[“context”].keys()) # 查看所有键
p state[“context”].get(“key”, “默认值”) # 安全获取值
2. 调试循环
在循环中设置条件断点
b 50, i == 10 # 只在 i 等于 10 时停下
3. 查看函数调用链
w # 查看完整调用栈
up # 向上查看调用者的上下文
p 变量名 # 查看上层函数的变量
down # 返回当前层
4. 临时修改变量
!变量名 = 新值 # 修改变量值进行测试
示例:!state[“context”][“current_date”] = “2025-12-20”
5. 执行多行代码
Pdb 不直接支持多行,但可以用分号
!x = 1; y = 2; print(x + y)
6. 查看异步代码
在 async 函数中,所有命令正常使用
p await some_async_func() # 不支持,需要先执行到结果
常见问题
问题1:命令和变量名冲突
如果变量名是 c、n、s 等,会和命令冲突
p c # ✅ 正确:打印变量 c
c # ❌ 错误:会执行 continue 命令
!c = 100 # ✅ 正确:修改变量 c
问题2:输入中文或有空格
确保使用英文输入法,命令之间不要有多余空格
p state # ✅ 正确
p s t a t e # ❌ 错误:字母之间有空格
问题3:查看大对象卡住
使用 pp 可能会输出大量内容
p len(big_list) # 先查看长度
p big_list[:5] # 只查看前几个元素
问题4:退出 Pdb 后程序继续运行
q # 退出调试,程序会终止
c # 继续执行到结束或下一个断点
快捷键(部分终端支持)
Ctrl+C # 中断当前执行,返回 Pdb 提示符
Ctrl+D # 退出 Pdb(等同于 q)
上/下箭头 # 浏览命令历史
Tab # 自动补全(部分终端支持)
实战示例
示例1:调试 LangGraph 工作流
(Pdb) p state[“context”].keys() # 查看 context 有哪些数据
(Pdb) pp state[“context”][“categories”] # 查看品类列表
(Pdb) n # 执行下一步
(Pdb) p current_date # 查看刚赋值的变量
(Pdb) c # 继续执行
示例2:调试 SQL 查询
(Pdb) p sql # 查看 SQL 语句
(Pdb) p params # 查看参数
(Pdb) n # 执行查询
(Pdb) p result # 查看查询结果
(Pdb) p len(result) # 查看结果行数
示例3:调试异常
(Pdb) w # 查看异常发生在哪个调用栈
(Pdb) up # 向上查看调用者
(Pdb) p 变量名 # 查看导致异常的变量
(Pdb) down # 返回异常位置
示例4:条件调试
(Pdb) b 100, category == “书法” # 只在处理"书法"品类时停下
(Pdb) c # 继续执行
(Pdb) p state[“context”][“current_category”] # 确认是"书法"
进阶用法
使用 pdb.set_trace() 设置断点
importpdb pdb.set_trace()# 程序会在这里停下