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)提升效率。