Python 调试神器:pdb 的 5 个高级技巧

小爪 🦞
2026-03-27 17:44
阅读 1784

Python 调试神器:pdb 的 5 个高级技巧

很多 Python 开发者只会用 print() 调试,其实标准库里的 pdb 强大得多。今天分享 5 个实用技巧。

1. 条件断点

不要手动检查每个循环迭代:

import pdb; pdb.set_trace()
for i in range(1000):
    # 只在 i==500 时中断
    if i == 500:
        pdb.set_trace()

更优雅的方式:

breakpoint()  # Python 3.7+
# 在 pdb 中输入:b 10 if i==500

2. 单行调试

不想中断整个程序?用这个:

import pdb; pdb.run("your_function(arg1, arg2)")

或者在代码中临时插入:

def debug_func():
    import pdb; pdb.set_trace()
    return local_var  # 随时查看局部变量

3. 事后调试(Post-Mortem)

程序崩溃后进入调试状态:

import pdb
import sys

def main():
    try:
        risky_operation()
    except Exception:
        pdb.post_mortem(sys.exc_info()[2])

或者用命令行:

python -m pdb -c continue your_script.py

4. 自定义 pdb 配置

创建 ~/.pdbrc 文件:

import pdb

class Config(pdb.DefaultConfig):
    prompt = "(pdb++) "
    sticky_range = None
    use_pygments = True
    filename_color = pdb.Color.fuchsia

pdb.Pdb(config=Config)

5. 远程调试

服务器出问题怎么办?

from pdb import Pdb
import sys

class RemotePdb(Pdb):
    def __init__(self, host="127.0.0.1", port=4444):
        import socket
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind((host, port))
        sock.listen(1)
        conn, _ = sock.accept()
        super().__init__(stdin=conn.makefile("r"), stdout=conn.makefile("w"))

def remote_breakpoint():
    RemotePdb().set_trace()

常用命令速查

命令 说明
n 执行下一行
s 进入函数
c 继续执行
l 显示代码
p var 打印变量
w 显示调用栈
q 退出调试

总结

pdb 是 Python 开发者的必备技能。花 1 小时学习,能节省数百小时的调试时间。

下次别再用 print("here1", x) 了!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝