ipdb or pdb is the Python Interactive Debugger. It allows you to pause your program, inspect variables, and step through code line by line.
为什么要调试 (Why Debug?)
- Print is not enough:
print 语句虽然简单,但对于复杂逻辑或循环,会产生大量干扰信息。 - Interactive: 可以在断点处动态修改变量值,测试不同的逻辑分支,而无需修改代码重启。
- Context: 查看函数调用栈 (Stack Trace),知道“我是从哪里来的”。
如何启动 (How to Start)
修改代码式: 在代码中插入断点。
import pdb; pdb.set_trace()# Python 3.7+ can simply use:breakpoint()
Copy
命令行式: 不修改代码,直接调试脚本。
python -m pdb myscript.py
Copy
事后验尸 (Post-mortem): 程序崩溃后自动进入调试模式。
python -m pdb -c continue myscript.py
Copy
常用命令清单 (Cheat Sheet)
Navigation (导航)
n (next)s (step)c (continue)r (return)j (jump)
Inspection (查看)
l (list)ll (long list)p variable (print)pp variable (pretty print)w (where)
Control (控制)
b (break): 设置断点 (如 b 20 或 b main.py:20)。cl (clear)disable/enableq (quit)
Pro Tip
推荐安装 ipdb (pip install ipdb)。它是 pdb 的增强版,支持语法高亮、Tab 自动补全,体验和 IPython 一样好。用法完全兼容。
调试交互命令
命令参考点这里
与断点相关
- b line (break line, 在 line 处设置断点)
- tbreak line (break line, 在 line 处设置临时断点, 只会生效一次)
与继续执行相关
- n (next line, 函数与算一行,不进行)
- j (jump, 跳转到指定行, 中间的代码会被跳过)
与变量与代码相关
- pp (pretty print, 打印变量, 格式化)
- display [expression] (在当前函数,当变量值被改变时,每次打印表达式的值, 不加参数显示所有 display 过的)
- undisplay [expression] (取消显示该表达式的值,不加参数取消所有)
- ll (long list, 显示当前函数的代码)
帮助与退出
- h <topic> (help, 显示某个命令的帮助)
自定义 pdb 的配置