python进阶: 深入了解调试利器 Pdb
Python是一种广泛使用的编程语言,以其简洁和可读性著称。在开发和调试过程中,遇到错误和问题是不可避免的。Python为此提供了一个强大的调试工具——Pdb(Python Debugger)。
Pdb是Python标准库中自带的调试器,可以帮助开发者跟踪代码执行、查看变量值、设置断点等功能。
1. 启动 pdb 调试
方法一:命令行启动
python -m pdb your_script.py
程序会从第一行开始暂停,进入 pdb 调试模式。
方法二:代码中插入断点
在需要调试的位置插入以下代码:
import pdb; pdb.set_trace() # Python 3.7+ 可简写为 breakpoint()
运行脚本时,程序会在 pdb.set_trace() 处暂停。
2. 常用命令
| 命令 | 简写 | 说明 |
|---|---|---|
next | n | 执行下一行(不进入函数内部) |
step | s | 进入函数内部 |
continue | c | 继续执行,直到下一个断点或程序结束 |
list | l | 显示当前代码位置周围的代码 |
print | p | 打印变量值,例如 p variable |
break | b | 设置断点,例如 b 10(第10行)或 b function_name |
where | w | 显示当前调用栈(即程序执行到此处的位置路径) |
return | r | 执行到当前函数返回 |
quit | q | 强制退出调试 |
help | h | 查看命令帮助 |
3. 高级用法
条件断点
b 20, condition # 在第20行设置条件断点,当条件满足时暂停
# 示例:b 10, x > 5 # 当变量 x 大于5时在第10行暂停
修改变量
p x = 10 # 在调试时修改变量 x 的值为10
查看命令历史
按 Enter 键可重复执行上一个命令。
4. 示例调试流程
假设有以下脚本 demo.py:
def add(a, b):result = a + breturn resultx = 5
y = 10
import pdb; pdb.set_trace() # 在此处暂停
total = add(x, y)
print(total)
调试步骤:
- 运行脚本,程序在
pdb.set_trace()处暂停。 - 输入
n执行下一行(此时total = add(x, y)还未执行)。 - 输入
s进入add函数内部。 - 输入
p result查看result的值。 - 输入
c继续执行,直到程序结束。
5. pdb.pm的使用
pdb.pm() 是 Python 调试器 pdb 中一个非常有用的功能,它用于在程序抛出异常(未被捕获的异常)后,自动进入调试模式,并定位到异常发生的堆栈帧(即错误发生的具体位置)。
def divide(a, b):return a / b
try:result = divide(5, 0)
except Exception as e:import pdb; pdb.pm() # 捕获异常后手动进入调试
6. 小技巧
- 交互式执行:在调试过程中可以直接输入变量名或表达式,例如直接输入
x查看其值。 - 断点管理:使用
break查看所有断点,clear删除断点。 - 跳过代码块:用
until跳出循环(例如until 15执行到第15行)。
通过 pdb 可以逐步跟踪代码逻辑,检查变量状态,快速定位问题。熟练后可以结合 IDE 的图形化调试工具(如 VS Code、PyCharm)提升效率。
