以下是关于Python标准调试器pdb的高级命令用法:
执行控制进阶命令
条件断点
b(reak) [filename:]lineno [if condition]
示例:
b 20 if x > 100 # 当x>100时在第20行中断
b mymodule.py:15 if not user.is_valid()
临时断点
tbreak [location] # 触发一次后自动删除
示例:
tbreak 30 # 第30行临时断点
tbreak my_function # 函数入口断点
命令自动化
commands [bpnumber] # 为断点附加自动执行的命令
示例:
commands 1
p x, y # 打印变量
c # 继续执行
end
数据探查技巧
动态表达式求值
!statement # 执行任意Python语句
示例:
!import numpy as np
!np.array(x).shape # 检查数组形状
对象深度检查
pp expression # 美化打印(需Python 3.8+)
ll / longlist # 显示完整函数代码
whatis arg # 显示变量类型
监视点
w(atch) expression # 当表达式值变化时中断
示例:
w len(data) > 100 # 列表长度超限时中断
w self._cache_hits > self._cache_misses
流程追踪技术
跳转执行
j(ump) lineno # 强行跳转到指定行(慎用)
示例:
j 42 # 跳过当前代码块直接执行42行
返回控制
r(eturn) # 执行到当前函数返回
runret [args] # 重新运行程序并停在return语句
回溯栈操作
u(p) / d(own) # 在调用栈间移动
w(here) # 显示完整调用链
多线程/异步调试
线程切换
thread [tid] # 切换到指定线程
threads # 列出所有活动线程
协程调试
interact # 进入交互模式检查事件循环
示例:
!import asyncio
!asyncio.get_running_loop().debug = True
实战组合技
场景:调试Flask请求超时
在视图函数中:
def handle_request():
import pdb; pdb.set_trace()
# 输入命令组合:
commands
p request.headers
p current_app.config['TIMEOUT']
w time.time() - start_time > 10
c
end
调试技巧矩阵:
性能敏感场景优化
远程调试
python -m pdb -c continue -m flask run --port 5000
通过telnet连接:
telnet localhost 4444
最小化侵入
import pdb; pdb.set_trace = lambda: None # 生产环境自动禁用
最新实践建议:
结合pdb++扩展包获得彩色输出和智能补全:
pip install pdbpp
export PYTHONBREAKPOINT=pdbpp.set_trace
VS Code用户可通过.vscode/launch.json配置"subProcess": true调试子进程
更新日期:2025年4月27日
交流讨论:欢迎在评论区留言!
重要提示:本文主要是记录自己的学习与实践过程,所提内容或者观点仅代表个人意见,只是我以为的,不代表完全正确,不喜请勿关注。
领取专属 10元无门槛券
私享最新 技术干货