极客油画

Python 的 pdb(Python Debugger)是 Python 标准库自带的交互式源代码调试器,是排查代码问题的利器。下面是一个从入门到实用的完整教程。

1. 什么是 pdb?

pdb 允许你在程序任意位置暂停执行(设置断点),然后单步运行代码、检查变量值、查看调用栈,甚至动态修改代码逻辑。它最大的优点是无需安装,Python 自带,随时随地可用。

2. 如何启动 pdb?

有三种主要方式,根据你的调试场景选择:

  • 方法一:在代码中设置断点(最常用、最灵活) 在你希望程序暂停的地方插入一行代码:

    1
    
    import pdb; pdb.set_trace()
    

    Python 3.7 开始,可以使用更简洁的内置函数:

    1
    
    breakpoint()  # 效果等同于 import pdb; pdb.set_trace()
    

    程序运行到这一行时会自动暂停,并进入 (Pdb) 交互式调试模式。

  • 方法二:命令行直接启动 如果你不想修改源代码,可以在运行脚本时直接使用 -m pdb 参数:

    1
    
    python -m pdb your_script.py
    

    程序会从第一行开始就进入调试模式。

  • 方法三:事后调试(Post-mortem) 当程序抛出异常崩溃后,你想查看崩溃现场的变量和堆栈,可以使用此方法:

    1
    
    python -m pdb -c continue your_script.py
    

    程序会在发生异常时自动暂停并进入调试模式。

3. 核心调试命令(进入 (Pdb) 模式后使用)

掌握以下命令,就能完成绝大多数调试任务:

命令 缩写 功能说明
next n 执行下一行代码。如果下一行是函数调用,不会进入函数内部。
step s 执行下一行代码。如果下一行是函数调用,会进入函数内部逐行调试。
continue c 继续执行程序,直到遇到下一个断点或程序结束。
list l 显示当前执行位置附近的源代码(默认前后共11行),用 --> 标记当前行。
print 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):

1
2
3
4
5
6
7
8
9
def calculate_average(numbers):
    total = sum(numbers)
    count = len(numbers)
    breakpoint()          # 程序将在此处暂停
    average = total / count
    return average

data = [1, 2, 3, 4, 5]
print(calculate_average(data))

运行程序后,会在 breakpoint() 处进入 (Pdb) 模式。你可以:

  1. 输入 p totalp count 查看计算前的变量值。
  2. 输入 n 执行下一行 (average = total / count)。
  3. 输入 p average 查看计算结果。
  4. 输入 c 继续运行程序直到结束。

通过这个流程,你可以清晰地观察函数每一步的执行状态。

总结

pdb 是每个 Python 开发者都应掌握的基础工具。对于快速定位问题,它比 print 更高效、更强大。对于更复杂的项目,你可以考虑使用 IDE(如 VS Code、PyCharm)内置的图形化调试器,它们底层也集成了类似 pdb 的功能,但提供了更好的可视化界面。


本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 极客油画 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image