python-debugpy について
Python開発者が対話型デバッグの場面に応じて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 では並列テストワーカーを無効にします。対話型 stdin は通常、ワーカープール内で問題を起こします。
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 対応