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()を無効にします。- デバッガデタッチ後にプロセスが停止したままの場合は、ブレークポイントでまだ一時停止していないか確認すること。