Skip to content

Python 调试器 pdb 的高级操作

pdb 提供了一些高级操作,帮助开发者更高效地调试 Python 程序。以下是一些高级操作的介绍:

条件断点

可以在特定条件下设置断点,只有在满足条件时程序才会暂停。例如,设置在变量 x 等于 5 时暂停:

python
b 12, x == 5

这个命令将在第 12 行且 x == 5 时触发断点。

查看并修改变量值

在调试过程中,可以查看和修改变量的值以观察不同的执行路径。例如:

sh
p variable_name

打印变量 variable_name 的值。

sh
!variable_name = new_value

将变量 variable_name 的值修改为 new_value

查看堆栈跟踪

可以查看当前执行点的调用堆栈,以了解程序是如何运行到当前位置的:

sh
w

该命令会显示堆栈跟踪信息。

执行任意代码

在调试模式下,可以执行任意的 Python 代码,这对于测试和验证很有帮助:

sh
!print("Hello from pdb")

在调试器中打印字符串 "Hello from pdb"。

调用堆栈导航

可以在调用堆栈中上下移动,以查看和调试不同的函数调用:

sh
u

向上移动一个堆栈帧。

sh
d

向下移动一个堆栈帧。

设置命令列表

可以在断点处设置命令列表,使得每次触发断点时自动执行指定的命令。例如:

sh
commands 1
> p x
> p y
> continue
end

以上命令会在断点 1 处自动打印 xy 的值,并继续执行程序。

持久断点

pdb 支持将断点信息保存到文件中,并在下次调试时自动加载。例如,可以使用以下命令保存断点:

sh
b file:breakpoints.txt

示例

以下是一个示例程序和调试过程,展示了上述高级操作:

python
def add(a, b):
    return a + b

def multiply(x, y):
    result = 0
    for _ in range(y):
        result = add(result, x)
    return result

import pdb; pdb.set_trace()

product = multiply(5, 3)
print(product)

调试过程

  1. 启动程序,会在 pdb.set_trace() 处暂停。
  2. 设置条件断点:b 6, y == 2,在 y 等于 2 时暂停。
  3. 查看变量值:p result
  4. 修改变量值:!result = 10
  5. 查看堆栈跟踪:w
  6. 向上移动堆栈帧:u
  7. 向下移动堆栈帧:d
  8. 设置命令列表:commands 1\np x\np y\ncontinue\nend
  9. 保存断点信息:b file:breakpoints.txt

通过这些高级操作,可以更加灵活和高效地使用 pdb 进行调试,从而快速定位和修复代码中的问题。