关于 python-debugpy
面向 Python 开发者的调试 Skill,帮助按场景选择 pdb 或 debugpy。涵盖本地、远程、无头进程、运行中进程及事后异常调试。
主要功能
- 01按场景选择 pdb 或 debugpy
- 02调试本地及远程进程
- 03附加到运行中的 PID
- 04检查变量、堆栈和断点
- 05故障后检查异常
适用场景
- 01追踪失败测试中的状态变化
- 02附加到远程或无头服务
- 03调查未处理的异常
- 04调试运行中的 Python 进程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ openclaw/ openclaw --skill python-debugpy安装后在 Claude Code 中输入/python-debugpy确认已加载。
详细介绍
Python Debugpy
当 Python 代码需要进行交互式调试时使用:隐藏的局部变量、难以理解的状态变更、失败的测试、子进程、长时间运行的服务,或远程/无头附加。
选择能停在问题栈帧上的最小调试器。
选择
breakpoint():本地代码,可修改源码,路径最快。python3 -m pdb:无需修改源码,从程序启动处开始调试。python3 -m pdb -c continue:在未处理异常处停止。debugpy:远程/无头附加、DAP 客户端、附加到已运行的进程 PID,或处理服务启动竞态。
命令
python3 -m pdb path/to/script.py arg1
python3 -m pdb -c continue path/to/script.py
python3 -c "import debugpy" || python3 -m pip install debugpy
python3 -m debugpy --listen 127.0.0.1:5678 --wait-for-client path/to/script.py
python3 -m debugpy --listen 127.0.0.1:5678 --wait-for-client -m package.module
python3 -m debugpy --listen 127.0.0.1:5678 --pid <pid>
对于源码编辑式附加:
import debugpy
debugpy.listen(("127.0.0.1", 5678))
debugpy.wait_for_client()
debugpy.breakpoint()
对于事后调试:
import pdb, sys
try:
run()
except Exception:
pdb.post_mortem(sys.exc_info()[2])
raise
pdb
- 流程:
n、s、r、c、q。 - 堆栈/源码:
w、u、d、a、l、ll。 - 值:
p expr、pp expr、display expr。 - 断点:
b file.py:42、b func、b file.py:42, condition、cl <num>。 - 修改/求值:
!statement;完整 REPL:interact。
规则
- 先使用最小命令/测试复现。
- 使用
pdb时禁用并行测试工作进程;交互式标准输入通常会在工作进程池中中断。 - 在当前使用的环境中保留
debugpy;除非项目本来就需要它,否则不要将其添加为项目依赖。 - 将调试服务绑定到
127.0.0.1;除非处于隔离环境或使用隧道,否则不要暴露0.0.0.0。 - 并行会话使用不同的端口。
debugpy --pid会注入正在运行的进程;附加前请确认目标 PID。- 如果在 Linux 上附加 PID 失败,请先检查 ptrace/容器权限,再更改目标进程。
- 提交前清理:
rg -n 'breakpoint\\(|pdb\\.set_trace|debugpy\\.' --type py。 - 不使用调试器,重新运行项目的常规测试/门禁。
PYTHONBREAKPOINT=0会禁用breakpoint()。- 如果进程在调试器分离后卡住,请确认它是否仍暂停在断点处。
评论
支持 Markdown