使用pdb模块调试Python程序实例

落日邮差
落日邮差
发布时间:2026-10-12| 2人浏览过
原创

当 Python 代码出现非语法类的逻辑偏差或变量未达预期时,仅靠 print 已不够高效。借助标准库自带的 pdb 调试器,开发者能够利用多种入口函数拦截执行流,并通过交互式命令单步跟踪、监测变量与灵活调度断点,从而彻底理清运行时数据流向。

pdb 基础与启动方式

pdb(Python Debugger)是 Python 标准库自带的交互式调试器。它支持设置断点、单步执行、查看变量值以及动态修改运行状态。除在脚本中直接导入模块外,也完全可以通过命令行参数启动:

python -m pdb your_script.py

常用调试入口函数

第1步:使用 pdb.run() 调试语句块

目的:在不修改源文件的情况下,临时调试一段以字符串形式传入的代码。入口为模块级函数,适用于测试片段逻辑。

import pdb
pdb.run('''
for i in range(3):
    i *= 3
    print(i)
''', globals=globals(), locals=locals())

参数说明:`statement` 为待执行的字符串代码;`globals` 和 `locals` 可选,用于指定全局与局部命名空间。执行后进入 (Pdb) 提示符,输入 n 单步执行,c 继续运行。

第2步:使用 pdb.runeval() 调试表达式

目的:针对单一表达式进行求值过程中的断点监控。常用于验证复杂计算或索引访问结果。

import pdb
lst = [1, 2, 3]
pdb.runeval('lst[1]')

该函数同样接受 `expression` 字符串参数。调试器会在表达式求值完成后返回,可通过 n 命令观察返回值并退出当前作用域。

第3步:使用 pdb.runcall() 调试函数调用

目的:在进入目标函数内部前暂停,便于检查传入参数与初始执行状态。

import pdb
def sum_values(*args):
    res = 0
    for arg in args:
        res += arg
    return res

pdb.runcall(sum_values, 1, 2, 3, 4)

参数 `*args` 和 `**kwds` 对应实际函数签名。调用后将在函数首行中断,可使用 print(res) 或 p res 查看变量。

第4步:在脚本中插入硬断点 pdb.set_trace()

目的:在特定代码位置永久挂起程序,是最常用的嵌入式调试方式。

# test.py
import pdb
pdb.set_trace()
for i in range(5):
    i *= 5
    print(i)

运行 python test.py 后,程序会自动停在 pdb.set_trace() 下一行。此时键入 l 可列出上下文代码,c 继续执行至文件末尾或下一个断点。

核心交互调试命令

进入 (Pdb) 提示符后,可使用以下常用指令控制执行流与数据观测:

  • n / next:执行下一行代码,不进入当前行的子函数。
  • s / step:执行下一行代码,如果该行是函数调用则进入函数内部。
  • c / continue:继续运行直到遇到下一个断点或程序结束。
  • r / return:一直运行到当前函数返回。
  • b / break:设置断点,支持 b 行号 或 b 函数名。
  • cl / clear:清除所有断点,需输入 y 确认。
  • disable 与 enable:禁用或启用特定编号的断点。
  • p / print:打印指定变量或表达式的值。
  • l / list:列出当前调试位置的源码清单(默认前后各5行)。
  • q / quit:退出调试器并终止程序。

实战:命令行交互式调试完整流程

假设存在检测素数的脚本 prime.py,可通过命令行模式逐步排查逻辑。

# -*- coding: utf-8 -*-
import math

def isprime(i):
    for t in range(2, int(math.sqrt(i)) + 1):
        if i % t == 0:
            return 0
    return 1

print('100~110之间素数有: ')
for i in range(100, 110):
    if isprime(i):
        print(i)

在终端执行 python -m pdb prime.py 后,按顺序操作:

  1. 输入 b 14 在第 14 行(循环开始处)设置断点。
  2. 输入 c 继续运行,程序命中断点后暂停。再次输入 c 触发函数 isprime 调用,可在函数内部检查循环变量。
  3. 输入 l 14,17 查看第 14 至 17 行源码确认缩进与逻辑。
  4. 输入 p i 打印当前迭代的数值(如 100)。
  5. 使用 disable 2 临时关闭某断点,调试结束后输入 cl 清理环境。
  6. 最后输入 c 跑完剩余逻辑,得到素数列表输出,随后键入 q 退出。

通过上述命令组合,无需打断生产环境即可精准追踪变量流转与条件分支走向。以上就是 pdb 模块调试 Python 程序的详细内容,更多关于 Python 进阶调试技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。