当サイトは、アフィリエイト広告を利用しています
Pythonのデバッグについては「debugpy」を
使うことが多いが
の組み合わせによって様々なデバッグ方法がある。
本記事では、デバッグ構成を4つの軸で分解し、すべてのパターンを整理する。
※IDEはVScodeを使用する
debugpyを使ったデバッグ方法の仕組みについては下記記事で解説している
当記事の前に読んでおくと便利
## デバッグ構成(4軸)
デバッグ構成は次の4軸で表せる。
1. Pythonの実行場所- ローカルで実行- コンテナ上で実行2. デバッグ操作位置※どこでデバッグを起動するか- 内側(同一環境)- 外側(リモート)3. debugpy起動形態- 埋め込み(import debugpy)- 外部起動(python -m debugpy)4. デバッグ方式- launch- attach
Pythonプログラムをどこで実行しているか?
実行場所としては
の2種類がある。
デバッグをどこで起動するのか?
今回の場合であれば、IDEとしてはVScodeを使用するので
内側(同一環境):Pythonが動いている環境と同じ環境でデバッグする
外側(リモート):Pythonが動いている環境と別の環境でデバッグする
の2種類がある。
debugpyをどのような形態で起動するのか?
今回の場合であれば、debugpyを
の2種類がある
デバッグをどのような方法で行うのか?
今回の場合であれば、debugpyを使ってデバッグするので
の2種類がある。
この4軸の組み合わせが
デバッグ構成となる
ただ組み合わせ的にあり得ないものもあるので
の3つを前提とする
今回の整理では、実行場所を
の2つに限定している。
このときローカル実行とは
を指す。
したがってローカル実行に対しては、
以外の整理をわざわざ独立パターンとして持つ必要がない。
つまり
1. ローカルに別環境は置かない→ ローカル × 別環境 を削除
launch は、VS Code が対象の Python プロセスを起動して、そのままデバッグを始める方式である。
つまり launch が成立するには
VS Code がその実行環境に対して直接プロセス起動できること が必要になる。
ローカル実行なら、ローカルの VS Code がローカルの Python を起動できる。
コンテナ内に入ってデバッグしているなら、コンテナ内環境に接続した VS Code がコンテナ内の Python を起動できる。
一方で、コンテナを外から見る構成では、
ので、VS Code はすでに存在しているコンテナ内プロセスに接続する形になる。
この場合は launch ではなく attach になる。
したがって、
コンテナ × 別環境└ attach のみ
となる。
attach は、先にデバッグ対象側で debugpy を待ち受けさせておき、あとから VS Code が接続する方式である。
そのため attach では、debugpy をどう起動するかを自分で決める必要がある。
その起動方法が
import debugpy) python -m debugpy) の2種類である。
一方 launch では、VS Code が起動処理の中でデバッグ開始まで面倒を見る。
したがって利用者が「debugpy を埋め込むか、外部起動するか」を分岐として持つ必要がない。
だから debugpy起動形態 は、attach の枝の下にだけ現れる。
前提を元にして実用的なデバッグ構成パターンを洗い出すと下記になる
Python実行場所├─ ローカル│ └─ デバッグ操作位置:同一環境│ ├─ デバッグ方式:launch│ └─ デバッグ方式:attach│ ├─ debugpy起動形態:埋め込み(import debugpy)│ └─ debugpy起動形態:外部起動(python -m debugpy)│└─ コンテナ├─ デバッグ操作位置:同一環境(コンテナに入る)│ ├─ デバッグ方式:launch│ └─ デバッグ方式:attach│ ├─ debugpy起動形態:埋め込み│ └─ debugpy起動形態:外部起動│└─ デバッグ操作位置:別環境(ホストから接続)└─ デバッグ方式:attach├─ debugpy起動形態:埋め込み└─ debugpy起動形態:外部起動
このパターン整理は、全組み合わせを列挙したものではない。
「成立しない組み合わせ」を除外した結果、実務上意味のある構成だけを残したものである。
これをデバッグ構成パターンとして列挙すると
となる。
Pythonのデバッグは複雑に見えるが、実際には以下の4軸で整理できる
この4軸で分解することで、すべてのデバッグ構成を体系的に理解できる
デバッグは「やり方」を覚えるものではなく
である
本記事では、debugpyを用いたデバッグ構成を4軸で整理した
実際の開発では、以下の3パターンを使い分けることが多い
それぞれの具体的な設定方法は、以下の記事で解説する
※以下は現在執筆中
【VS Code】Dockerコンテナにリモートattachする方法
(コンテナ × 別環境 × attach × 埋め込み / 外部起動)
【VS Code】Dockerコンテナ内でPythonをデバッグする方法
(コンテナ × 同一環境 × launch / attach)