使用 import pdb; pdb.set_trace() 是 Python 中通过内置调试器 pdb 进行代码调试的常用方法。以下是具体的使用步骤和技巧:
1. 基本用法
在代码中插入 pdb.set_trace(),程序运行到该行时会暂停并进入交互式调试模式。例如:
python
import pdb
def example_function():
a = 1
b = 2
pdb.set_trace() # 程序在此暂停
c = a + b
print(c)
example_function()
运行后,程序会在 pdb.set_trace() 处停止,终端显示 (Pdb) 提示符,表示已进入调试模式[citation:2][citation:5]。
2. 常用调试命令
在 (Pdb) 提示符下,可以使用以下命令:
n(next):执行下一行代码,不进入函数内部[citation:2][citation:5]。s(step):进入函数内部调试[citation:2][citation:6]。c(continue):继续执行,直到下一个断点或程序结束[citation:5][citation:6]。l(list):显示当前代码上下文(前后各5行)[citation:5]。p <变量名>:打印变量的值(如p a显示变量a的值)[citation:2][citation:6]。q(quit):退出调试并终止程序[citation:5]。
3. 高级功能
- 修改变量值 :
在调试模式下,使用!直接修改变量(如!a = 10将变量a改为10)[citation:2][citation:6]。 - 设置条件断点 :
通过b <行号>或b <函数名>设置断点(如b 10在第10行设置断点)[citation:1][citation:5]。 - 查看调用栈 :
使用w(where) 显示当前调用栈,u/d上下移动栈帧[citation:1][citation:3]。
4. 替代写法
Python 3.7+ 支持内置函数 breakpoint(),效果与 pdb.set_trace() 相同:
python
def example():
breakpoint() # 等同于 pdb.set_trace()
print("Debugging")
此方式更简洁,且可通过环境变量 PYTHONBREAKPOINT 切换调试工具(如 ipdb)[citation:1][citation:3]。
5. 注意事项
- 多线程/异步程序 :
在异步函数中需使用await pdb.set_trace_async()(Python 3.14+)[citation:4]。
如需更友好的界面,可尝试增强版调试工具如 ipdb 或 pudb。