使用 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
。