小合
小合
发布于 2026-03-10 / 4 阅读
0
0

Python PDB 调试器完全指南

PDB(Python Debugger)是 Python 内置的标准调试器,无需安装任何第三方包即可使用。本文将全面介绍 PDB 的使用方法,帮助你快速定位和解决 Python 代码中的问题。

 

1. 为什么需要调试器?

在编写 Python 代码时,你可能遇到过:

 程序崩溃,但不知道具体是哪一行出错

 变量值不符合预期,难以追踪问题根源

 复杂逻辑难以理解,执行流程不清晰

这时,一个强大的调试器就能派上用场。PDB 作为 Python 标准库的一部分,提供了完整的调试功能。

 

2. 启动 PDB 的几种方式

2.1 命令行启动(最常用)

Bash
python -m pdb your_script.py

程序会在第一行代码处暂停,进入调试模式。

2.2 在代码中设置断点

在需要暂停的位置添加:

Python
import pdb  # Python 3.7+ 也可以直接用 pdb.set_trace()

def calculate(a, b):
    result = a + b
    pdb.set_trace()  # 程序运行到这里会暂停
    return result * 2

print(calculate(5, 3))

2.3 Post-Mortem 调试(事后调试)

当程序崩溃后,使用 pm() 进入调试:

Python
# 程序崩溃后
import pdb
pdb.pm()

或者直接对异常使用 post-mortem:

Python
import pdb
import traceback

try:
    # 可能出错的代码
    result = 1 / 0
except Exception:
    traceback.print_exc()
    pdb.post_mortem()

2.4 使用 runcall() 运行函数

Python
import pdb

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

pdb.runcall(add, 3, 5)

 

3. 常用调试命令一览

进入 PDB 后,你会看到 (Pdb) 提示符。以下是高频使用的命令:

命令

简写

说明

next

n

执行下一行代码(不进入函数)

step

s

执行下一行代码(进入函数)

continue

c

继续执行到下一个断点

quit / exit

q

退出调试器

print

p

打印变量值

list

l

查看当前代码上下文

where

w

显示当前堆栈位置

up

u

移动到上层堆栈

down

d

移动到下层堆栈

break

b

设置断点

clear

cl

清除断点

help

h

查看帮助

3.1 查看代码:l(ist)

Bash
(Pdb) l
# 显示当前行前后的代码(默认 11 行)

(Pdb) l 1, 20
# 显示第 1 到 20 行

3.2 打印变量:p

Bash
(Pdb) p variable_name
# 打印变量值

(Pdb) p locals()
# 打印所有局部变量

(Pdb) p globals()
# 打印全局变量

�� 小技巧:除了 p,你也可以直接输入变量名查看其值。

3.3 单步执行:s(tep) vs n(ext)

Bash
(Pdb) s  # step - 进入函数内部
(Pdb) n
 # next - 跳过函数,直接执行完当前函数

3.4 堆栈导航:u(p) / d(own)

Bash
(Pdb) w  # where - 查看当前位置
(Pdb) u
 # up - 回到上层调用
(Pdb) d
 # down - 回到下层调用

 

4. 断点的高级用法

4.1 设置断点

Bash
(Pdb) b 10          # 在第 10 行设置断点
(Pdb) b function_name
 # 在函数第一行设置断点
(Pdb) b other_file.py:5
 # 在其他文件设置断点

4.2 条件断点

Bash
(Pdb) b 10, x > 5  # 当 x > 5 时才在第 10 行暂停

4.3 临时断点(只触发一次)

Bash
(Pdb) tbreak 10

4.4 管理断点

Bash
(Pdb) b              # 查看所有断点
(Pdb) cl 1
          # 删除编号为 1 的断点
(Pdb) cl
            # 清除所有断点
(Pdb) disable 1
    # 禁用断点 1
(Pdb) enable 1
      # 启用断点 1

4.5 断点命令自动化

可以为断点绑定自动执行的命令:

Bash
(Pdb) commands 1
(com) p some_variable
(com) continue
(com) end

 

5. 执行流程控制

5.1 跳转执行:j(ump)

Bash
(Pdb) j 15  # 跳转到第 15 行执行

⚠️ 注意:jump 不能跳到循环体外或已经执行的代码块中。

5.2 继续执行到指定行:until

Bash
(Pdb) until 20  # 继续执行直到第 20 行

 

6. 动态执行代码

在调试过程中,你可以直接执行 Python 代码:

Bash
(Pdb) !x = 10        # 修改变量值
(Pdb) !my_func()
    # 调用函数
(Pdb) !import os; os.system('ls')
 # 执行任意 Python 语句

 

7. 实用技巧

7.1 使用 .pdbrc 配置文件

在 home 目录或当前目录创建 .pdbrc 文件,可以自动加载常用配置和别名:

Bash
# ~/.pdbrc
# 设置默认显示行数
alias s s
alias n n

# 常用断点
break my_function

7.2 在 VS Code / PyCharm 中使用 PDB

现代 IDE 都支持将 PDB 作为默认调试器,体验更好(断点可视化、变量查看面板等)。

7.3 调试与日志结合

Python
import pdb

def complex_function(data):
    for item in data:
        pdb.set_trace()  # 逐个调试
        # 处理逻辑...
        result = process(item)
    return results

7.4 优雅地处理循环中的调试

Python
import pdb

for i in range(100):
    pdb.set_trace() if i 49 else None  # 只在第 50 次暂停
    # 或者用条件断点:b 10, i 49

 

8. 快速命令参考卡

Plain Text
┌─────────────────────────────────────────────────────────┐
                  PDB 快速命令参考                       
├─────────────────────────────────────────────────────────┤
 启动方式                                               
 ─────────────────────────────────────────────────────  
 python -m pdb script.py    # 命令行启动                
 pdb.set_trace()            # 代码中嵌入                
 pdb.pm()                   # 崩溃后调试                 
├─────────────────────────────────────────────────────────┤
 基本操作                                               
 ─────────────────────────────────────────────────────  
 n / next    执行下一行(不进入函数)                   
 s / step    执行下一行(进入函数)                     
 c / continue 继续执行到下一断点                         
 q / quit    退出调试                                   
├─────────────────────────────────────────────────────────┤
 查看与导航                                             
 ─────────────────────────────────────────────────────  
 l / list    查看当前代码                               
 w / where   查看调用堆栈                                
 u / up      回到上层堆栈                               
 d / down    回到下层堆栈                               
 p var       打印变量值                                 
├─────────────────────────────────────────────────────────┤
 断点管理                                               
 ─────────────────────────────────────────────────────  
 b lineno   设置断点                                    
 b func     在函数处设置断点                            
 b line, cond  条件断点                                 
 cl         清除所有断点                                
 cl num     清除指定编号断点                            
 disable/enable  禁用/启用断点                         
└─────────────────────────────────────────────────────────┘

 

9. 总结

PDB 是 Python 开发者必备的调试工具,功能强大且无需额外安装。掌握以下核心技能即可应对大部分调试场景:

1. 启动:python -m pdb 或 pdb.set_trace()

2. 单步:n(过函数)和 s(进函数)

3. 断点:b 设置,c 继续

4. 查看:l 看代码,p 看变量

5. 条件断点:精准控制调试位置

对于更复杂的调试需求,可以考虑 ipdb(IPython 增强版)或 IDE 内置调试器,它们提供更友好的交互界面。

Happy Debugging!


评论