当サイトは、アフィリエイト広告を利用しています
PythonのデバッグをVS Codeで行う際
が気になったので調べてみた。
本記事では、その中核にある
の仕組みを整理し、さらに実務で重要となる
を解説する。
debugpyとは、
である。
より本質的には以下の役割を持つ。
通常のPythonは以下のような操作を外部から受け付けない。
debugpyはこれらを可能にする「通訳層」として機能する。
debugpyを理解するには、DAPの理解が不可欠である。
DAPとは
である。
もしDAPが存在しない場合、以下の問題が発生する。
つまり、組み合わせごとに実装が爆発する。
これを解決するために
IDE ←→ DAP ←→ デバッガ
という構造に抽象化されている。
つまり、
である。
このDAPが、実際のデバッグ時にどのように使われるのかを全体構造で見る。
VS CodeでPythonをdebugpy経由でデバッグする構造は以下の通りである。
VS Code(DAP Client)↓DAP通信↓debugpy(DAP Server + Debugger)↓Pythonプロセス
debugpyは基本的にサーバとして動作する。
VS Code → debugpy → Python
つまり「IDEが接続する」モデルである。
debugpyの利用方法は大きく2つに分かれる。
この違いは「誰がPythonを起動するか」に集約される。
Attachとは、すでに動いているPythonプロセスに後から接続する方式である。
Python起動↓debugpyが待機↓VS Codeが接続
import debugpydebugpy.listen(("0.0.0.0", 5678))debugpy.wait_for_client()def main():print("hello")if __name__ == "__main__":main()
listen():接続待ち受け wait_for_client():接続まで停止 Launchとは、IDEがdebugpy付きでPythonを起動する方式である。
VS Codeが実行(F5)↓debugpy付きでPython起動
def main():print("hello")if __name__ == "__main__":main()
違いは一つに集約できる。
debugpyは単なるツールではなく、「デバッグを外部化するためのアーキテクチャ」である。
この視点を持つことで、環境に依存しないデバッグ設計が可能になる。