Python 的 pdb(Python Debugger)是 Python 标准库自带的交互式源代码调试器,是排查代码问题的利器。下面是一个从入门到实用的完整教程。
1. 什么是 pdb?
pdb 允许你在程序任意位置暂停执行(设置断点),然后单步运行代码、检查变量值、查看调用栈,甚至动态修改代码逻辑。它最大的优点是无需安装,Python 自带,随时随地可用。
2. 如何启动 pdb?
有三种主要方式,根据你的调试场景选择:
-
方法一:在代码中设置断点(最常用、最灵活) 在你希望程序暂停的地方插入一行代码:
1import pdb; pdb.set_trace()从 Python 3.7 开始,可以使用更简洁的内置函数:
1breakpoint() # 效果等同于 import pdb; pdb.set_trace()程序运行到这一行时会自动暂停,并进入
(Pdb)交互式调试模式。 -
方法二:命令行直接启动 如果你不想修改源代码,可以在运行脚本时直接使用
-m pdb参数:1python -m pdb your_script.py程序会从第一行开始就进入调试模式。
-
方法三:事后调试(Post-mortem) 当程序抛出异常崩溃后,你想查看崩溃现场的变量和堆栈,可以使用此方法:
1python -m pdb -c continue your_script.py程序会在发生异常时自动暂停并进入调试模式。
3. 核心调试命令(进入 (Pdb) 模式后使用)
掌握以下命令,就能完成绝大多数调试任务:
| 命令 | 缩写 | 功能说明 |
|---|---|---|
| next | n |
执行下一行代码。如果下一行是函数调用,不会进入函数内部。 |
| step | s |
执行下一行代码。如果下一行是函数调用,会进入函数内部逐行调试。 |
| continue | c |
继续执行程序,直到遇到下一个断点或程序结束。 |
| list | l |
显示当前执行位置附近的源代码(默认前后共11行),用 --> 标记当前行。 |
p |
打印变量或表达式的值,例如 p variable_name。 |
|
| break | b |
设置断点。用法:b 行号 或 b 函数名。 |
| where | w |
打印当前的调用堆栈信息,帮助你了解代码的执行路径。 |
| return | r |
继续执行,直到当前函数返回。 |
| quit | q |
退出调试器,终止程序。 |
4. 高级用法与技巧
- 条件断点:只在满足特定条件时暂停。例如:
b 10, x > 5表示在第10行,仅当变量x大于5时才触发断点。 - 跳转执行:使用
j lineno可以直接跳转到指定行继续执行(需谨慎使用,可能破坏程序逻辑)。 - 修改变量:在
(Pdb)提示符下,可以直接输入Python语句来修改变量,例如x = 10。 - 查看函数参数:在函数内部时,使用
a命令可以打印出函数的所有参数及其当前值。 - 重复上一条命令:在
(Pdb)提示符下直接按回车键,会重复执行上一条命令(如连续按回车等于连续执行n)。
5. 一个简单的调试示例
假设你有以下代码 (demo.py):
运行程序后,会在 breakpoint() 处进入 (Pdb) 模式。你可以:
- 输入
p total和p count查看计算前的变量值。 - 输入
n执行下一行 (average = total / count)。 - 输入
p average查看计算结果。 - 输入
c继续运行程序直到结束。
通过这个流程,你可以清晰地观察函数每一步的执行状态。
总结
pdb 是每个 Python 开发者都应掌握的基础工具。对于快速定位问题,它比 print 更高效、更强大。对于更复杂的项目,你可以考虑使用 IDE(如 VS Code、PyCharm)内置的图形化调试器,它们底层也集成了类似 pdb 的功能,但提供了更好的可视化界面。
本文发表于 0001-01-01,最后修改于 0001-01-01。
本站永久域名「 jiavvc.top 」,也可搜索「 极客油画 」找到我。

