Python 工具 PDB 调试器的使用方法

📅 2026/7/10 13:40:42
Python 工具 PDB 调试器的使用方法
1. 为什么学习调试器大家平时是怎么调试代码的呢我平时是这两种使用print打印变量发布时再注释掉使用日志设置控制台为DEBUG模式发布时设置控制台为更严重级别就不用一个个注释print第一个方式需要侵入代码且调试后需要注释有的时候忘记注释了一个print比较繁琐。第二个方式优雅了一些但有的时候就是写的小脚本不需要保存日志比较麻烦。这两个还有一些缺点例如打印的不够多时还需要添加print或log然后再次运行。所以我们来学习一个更优雅的方式使用调试器。2. pdb介绍pdb 是 Python 自带的一个包为 Python 程序提供了一种交互的源代码调试功能主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令命令解释break 或 b 设置断点设置断点continue 或 c继续执行程序list 或 l查看当前行的代码段step 或 s进入函数return 或 r执行代码直到从当前函数返回exit 或 q中止并退出next 或 n执行下一行pp打印变量的值w打印堆栈信息a打印函数参数值help帮助3. 如何使用pdb?3.1. 启动 PDB 调试器要在 Python 代码中启动 PDB 调试器需要在需要调试的代码行上加入import pdb; pdb.set_trace()代码。这样在运行代码时程序将会在此处暂停并启动 PDB 调试器。例如以下代码演示了如何使用 PDB 调试器调试 Python 代码import pdb ​ def add_numbers(a, b): pdb.set_trace() return a b result add_numbers(5, 10) print(result)在执行以上代码时当程序执行到pdb.set_trace()时程序将会暂停并启动 PDB 调试器。此时你可以输入命令来查看变量、检查堆栈、单步执行代码等。当然还有另一种方式像这样def add_numbers(a, b): breakpoint() return a b ​ result add_numbers(5, 10) print(result)3.7 新版功能内置函数 breakpoint()当以默认参数调用它时可以用来代替import pdb; pdb.set_trace()。如果你是想通过命令行来启动当然也是支持的像这样python3 -m pdb pdb_demo.py3.2. 基本的 PDB 命令在 PDB 调试器中有许多命令可以使用。以下是一些最常用的 PDB 命令n(ext)单步执行代码s(tep)进入子函数或方法r(eturn)执行代码直到当前函数返回c(ontinue)继续执行代码直到下一个断点或程序结束l(ist)显示当前代码段周围的源代码p打印变量的值h(elp)查看帮助信息b(reak)设置断点。比如b 10在第10行设置一个断点。行号可以加上文件名和冒号作为前缀以在另一个文件中设置一个断点。c(lear)清楚断点q(uit)退出调试器。 被执行的程序将被中止。restart 重启被调试的 Python 程序。3.3. 使用 PDB 调试器调试 Python 代码在使用 PDB 调试器调试 Python 代码时以下是一些常用的技巧在使用n(ext)或s(tep)命令时可以在命令后加上数字以指定要执行多少次代码。例如使用n 3命令将会执行下三行代码。在使用l(ist)命令时可以在命令后加上代码行号以指定要显示哪一段源代码。例如使用l 5,10命令将会显示第 5 行到第 10 行的代码。在使用p命令时可以打印表达式的值并以逗号分隔打印多个表达式的值。例如使用p a, b, c命令将会打印变量 a、b 和 c 的值。在使用 PDB 调试器时你可以使用!命令执行 Python 表达式。例如使用!a b命令将会计算 a b 的值。4. 常见问题4.1. 抛出异常BdbQuit4.1.1. 现象File /usr/local/lib/python3.9/bdb.py, line 88, in trace_dispatch return self.dispatch_line(frame) File /usr/local/lib/python3.9/bdb.py, line 113, in dispatch_line if self.quitting: raise BdbQuit bdb.BdbQuit ERROR:rokidloc_server:reconstruct failed, reason:4.1.2. 原因分析bdb是pdb的底层库用于提供断点、单步等功能。该错误消息 bdb.BdbQuit 通常出现在调试器退出时。由于断点、单步等操作是通过向代码中注入信号来完成的在程序卡住或被无限循环阻塞时这些信号无法恰当的注入或被接收处理pdb 所在的环境可能变得不可靠或不一致调试器就会自动退出以防止进一步的问题。5. 最后在 Python 开发过程中PDB 调试器是一个非常有用的工具它可以帮助你快速定位和解决代码中的问题。除了这些常用命令还有许多其他的命令可以使用这里就不在一一赘述了。你可以参考对应的官方文档pdb — The Python Debugger — Python 3.12.1 documentation来熟悉这些用法。参考文献python学习-代码调试器pdb的使用教程_python pdb-CSDN博客Python工具PDB调试器的使用方法详解_python_脚本之家python代码调试神器-pdb_python pdb调试-CSDN博客python多进程卡死问题排查_python多进程卡住-CSDN博客