VS Code での Python デバッグ
Python 拡張機能は、いくつかの種類の Python アプリケーションに対して、Python Debugger 拡張機能を通じたデバッグをサポートしています。基本的なデバッグの簡単なチュートリアルについては、「チュートリアル - デバッガーの構成と実行」を参照してください。また、「Flask チュートリアル」も併せて参照してください。どちらのチュートリアルでも、ブレークポイントの設定やコードのステップ実行といった核となるスキルを学ぶことができます。
変数の検査、ブレークポイントの設定、その他言語に依存しない一般的なデバッグ機能については、「VS Code のデバッグ」をご覧ください。
この記事では、主に Python 固有のデバッグ「構成」について、特定のアプリタイプやリモートデバッグに必要な手順を含めて解説します。
Python Debugger 拡張機能
Python Debugger 拡張機能は、VS Code 用の Python 拡張機能と共に自動的にインストールされます。これは、スクリプト、Web アプリ、リモートプロセスなど、さまざまな種類の Python アプリケーションに対して debugpy を使用したデバッグ機能を提供します。
インストールされていることを確認するには、**拡張機能**ビュー(⇧⌘X (Windows, Linux Ctrl+Shift+X))を開き、@installed python debugger を検索してください。結果に Python Debugger 拡張機能が表示されるはずです。

サポートされている Python バージョンの詳細については、拡張機能の README ページを参照してください。
構成の初期化
構成は、デバッグセッション中の VS Code の動作を制御します。構成は、ワークスペースの .vscode フォルダーに保存される launch.json ファイルで定義されます。
注: デバッグ構成を変更するには、コードがフォルダー内に保存されている必要があります。
デバッグ構成を初期化するには、まずサイドバーの **実行とデバッグ** ビューを選択します
![]()
まだ構成が定義されていない場合は、**実行とデバッグ** ボタンと、構成(launch.json)ファイルを作成するためのリンクが表示されます。

Python の構成を含む launch.json ファイルを生成するには、以下の手順を実行します
-
**launch.json ファイルを作成します** というリンク(上の画像で囲まれている部分)を選択するか、**実行** > **構成を開く** メニューコマンドを使用します。
-
デバッガーのオプションリストから **Python Debugger** を選択します。
-
コマンドパレットから構成メニューが開き、Python プロジェクトファイルに使用するデバッグ構成の種類を選択できます。単一の Python スクリプトをデバッグする場合は、表示される **デバッグ構成の選択** メニューで **Python File** を選択します。

注: 構成が存在しない状態でデバッグパネル、F5 キー、または **実行** > **デバッグの開始** からデバッグセッションを開始すると、デバッグ構成メニューが表示されますが、
launch.jsonファイルは作成されません。 -
その後、Python Debugger 拡張機能が
launch.jsonファイルを作成して開きます。これには、以前に選択した内容(この場合は **Python File**)に基づいた定義済みの構成が含まれます。構成は変更したり(引数を追加するなど)、カスタム構成を追加したりできます。
構成プロパティの詳細については、この記事の後半の「標準構成とオプション」で説明しています。その他の構成についても、この記事の「特定のアプリタイプのデバッグ」で説明しています。
追加の構成
デフォルトでは、VS Code には Python Debugger 拡張機能が提供する最も一般的な構成のみが表示されます。リストや launch.json エディターに表示される **構成の追加** コマンドを使用して、他の構成を launch.json に追加できます。このコマンドを使用すると、VS Code は利用可能なすべての構成のリストを表示します(必ず **Python** オプションを選択してください)。

**プロセス ID を使用してアタッチ** を選択すると、以下の結果が得られます: 
これらのすべての構成の詳細については、「特定のアプリタイプのデバッグ」を参照してください。
デバッグ中、ステータスバーには現在の構成と現在のデバッグ用インタープリターが表示されます。構成を選択するとリストが表示され、そこから別の構成を選択できます。

デフォルトでは、デバッガーはワークスペースで選択されているのと同じインタープリターを使用します(これは VS Code 用の Python 拡張機能の他の機能と同様です)。デバッグ専用に異なるインタープリターを使用するには、適用されるデバッガー構成の launch.json で python の値を設定します。あるいは、ステータスバーの Python インタープリターインジケーターを使用して別のものを選択します。
基本的なデバッグ
Python スクリプトのデバッグのみが必要な場合は、エディターの実行ボタンの横にある下矢印を選択し、**Python Debugger: Python ファイルのデバッグ** を選択するのが最も簡単です。

Flask、Django、FastAPI を使用した Web アプリケーションをデバッグする場合、Python Debugger 拡張機能は、**実行とデバッグ** ビュー内の **すべての自動デバッグ構成を表示** オプションを通じて、プロジェクト構造に基づいたデバッグ構成を動的に作成します。

他の種類のアプリケーションをデバッグしたい場合は、**実行とデバッグ** ビューの **実行とデバッグ** ボタンをクリックしてデバッガーを開始できます。

構成が設定されていない場合は、デバッグオプションのリストが表示されます。ここで適切なオプションを選択して、コードを素早くデバッグできます。
2 つの一般的なオプションは、現在開いている Python ファイルを実行する **Python File** 構成と、すでに実行中のプロセスにデバッガーを接続する **プロセス ID を使用してアタッチ** 構成です。
デバッグ構成の作成と使用に関する情報については、「構成の初期化」および「追加の構成」セクションを参照してください。構成が追加されると、ドロップダウンリストから選択し、**デバッグの開始** ボタン(F5)を使用して開始できます。

コマンドラインデバッグ
Python 環境に debugpy がインストールされていれば、コマンドラインからデバッガーを実行することもできます。
debugpy のインストール
debugpy は、python -m pip install --upgrade debugpy を使用して Python 環境にインストールできます。
仮想環境の使用は必須ではありませんが、推奨されるベストプラクティスです。VS Code で仮想環境を作成するには、コマンドパレット(⇧⌘P (Windows, Linux Ctrl+Shift+P))を開き、**Python: 環境の作成** コマンドを実行するか、環境マネージャービューで **+** ボタンを選択します。
コマンドライン構文
デバッガーのコマンドライン構文は以下の通りです。
python -m debugpy
--listen | --connect
[<host>:]<port>
[--wait-for-client]
[--configure-<name> <value>]...
[--log-to <path>] [--log-to-stderr]
<filename> | -m <module> | -c <code> | --pid <pid>
[<arg>]...
例
コマンドラインから、指定したポート(5678)とスクリプトを使用してデバッガーを開始するには、以下の構文を使用します。この例ではスクリプトが長時間実行されることを想定しており、--wait-for-client フラグを省略しています。つまり、クライアントのアタッチを待機しません。
python -m debugpy --listen 5678 ./myscript.py
その後、以下の構成を使用して VS Code Python Debugger 拡張機能からアタッチします。
{
"name": "Python Debugger: Attach",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
}
}
注: **listen** のホスト指定はオプションです。デフォルトでは 127.0.0.1 が使用されます。
リモートコードや Docker コンテナーで実行されているコードをリモートマシン上でデバッグする場合は、前述の CLI コマンドを変更してホストを指定する必要があります。
python -m debugpy --listen 0.0.0.0:5678 ./myscript.py
関連する構成ファイルは以下のようになります。
{
"name": "Attach",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "remote-machine-name", // replace this with remote machine name
"port": 5678
}
}
注:
127.0.0.1またはlocalhost以外のホスト値を指定すると、どのマシンからでもアクセス可能なポートが開かれ、セキュリティリスクが生じることに注意してください。リモートデバッグを行う際は、SSH トンネルの使用など、適切なセキュリティ対策を必ず講じてください。
コマンドラインオプション
| フラグ | オプション | 説明 |
|---|---|---|
| --listen または --connect | [<host>:]<port> |
必須。デバッグアダプターサーバーが着信接続を待機する (--listen)、または接続を待機しているクライアントに接続する (--connect) ためのホストアドレスとポートを指定します。これは VS Code のデバッグ構成で使用されるアドレスと同じです。デフォルトのホストアドレスは localhost (127.0.0.1) です。 |
| --wait-for-client | none | オプション。デバッグサーバーからの接続があるまでコードを実行しないように指定します。この設定により、コードの最初の行からデバッグを開始できます。 |
| --log-to | <path> |
オプション。ログを保存するための既存のディレクトリへのパスを指定します。 |
| --log-to-stderr | none | オプション。debugpy がログを stderr に直接書き込めるようにします。 |
| --pid | <pid> |
オプション。デバッグサーバーを注入する、すでに実行中のプロセスを指定します。 |
| --configure-<name> | <value> |
オプション。クライアントが接続する前にデバッグサーバーが認識しておくべきデバッグプロパティを設定します。このようなプロパティは launch 構成で直接使用できますが、attach 構成の場合はこの方法で設定する必要があります。例えば、デバッグサーバーがアタッチ先のプロセスによって作成されたサブプロセスに自動的に注入されないようにするには、--configure-subProcess false を使用します。 |
注:
[<arg>]を使用して、起動するアプリにコマンドライン引数を渡すことができます。
ネットワーク接続経由でアタッチするデバッグ
ローカルスクリプトのデバッグ
別のプロセスによってローカルで呼び出される Python スクリプトをデバッグする必要がある場合があります。例えば、特定の処理ジョブのために異なる Python スクリプトを実行する Web サーバーをデバッグする場合などです。このような場合は、スクリプトが起動した後に VS Code デバッガーをアタッチする必要があります。
-
VS Code を実行し、スクリプトを含むフォルダーまたはワークスペースを開き、まだ存在しない場合はそのワークスペース用に
launch.jsonを作成します。 -
スクリプトコードに以下を追加し、ファイルを保存します。
import debugpy # 5678 is the default attach port in the VS Code debug configurations. Unless a host and port are specified, host defaults to 127.0.0.1 debugpy.listen(5678) print("Waiting for debugger attach") debugpy.wait_for_client() debugpy.breakpoint() print('break on this line') -
**ターミナル: 新しいターミナルを作成** を使用してターミナルを開き、スクリプトの選択済み環境をアクティブにします。
-
ターミナルで、debugpy パッケージをインストールします。
-
ターミナルで、
python3 myscript.pyのようにスクリプトと共に Python を起動します。コードに含まれる "Waiting for debugger attach" というメッセージが表示され、スクリプトはdebugpy.wait_for_client()の呼び出しで停止します。 -
**実行とデバッグ** ビュー(⇧⌘D (Windows, Linux Ctrl+Shift+D))に切り替え、デバッガーのドロップダウンリストから適切な構成を選択し、デバッガーを開始します。
-
デバッガーは
debugpy.breakpoint()の呼び出しで停止するはずです。そこから通常通りデバッガーを使用できます。また、debugpy.breakpoint()を使用する代わりに UI を使用してスクリプトコードに他のブレークポイントを設定することも可能です。
SSH を使用したリモートスクリプトデバッグ
リモートデバッグを使用すると、プログラムがリモートコンピューターで実行されている間に、ローカルの VS Code 内でステップ実行できます。リモートコンピューターに VS Code をインストールする必要はありません。セキュリティを強化するため、デバッグ時には SSH などの安全な接続を使用してリモートコンピューターに接続することをお勧めします。
注: Windows コンピューターでは、
sshコマンドを使用するために Windows 10 OpenSSH のインストールが必要になる場合があります。
以下の手順は、SSH トンネルを設定するための一般的なプロセスを概説したものです。SSH トンネルを使用すると、公開アクセス用にポートを開くよりも安全な方法で、ローカルマシンから直接リモートで作業しているかのように作業できます。
リモートコンピューター上での作業
-
sshd_config構成ファイル(Linux では/etc/ssh/、Windows では%programfiles(x86)%/openssh/etcにあります)を開き、次の設定を追加または変更してポート転送を有効にします。AllowTcpForwarding yes注: AllowTcpForwarding のデフォルトは yes なので、変更の必要がない場合もあります。
-
AllowTcpForwardingを追加または変更した場合は、SSH サーバーを再起動します。Linux/macOS ではsudo service ssh restartを実行し、Windows ではservices.mscを実行してサービスリストから OpenSSH またはsshdを選択し、**再起動** を選択します。
ローカルコンピューター上での作業
-
ssh -2 -L sourceport:localhost:destinationport -i identityfile user@remoteaddressを実行して SSH トンネルを作成します。destinationportには選択したポートを、user@remoteaddressには適切なユーザー名とリモートコンピューターの IP アドレスを入力します。例えば、IP アドレス 1.2.3.4 のポート 5678 を使用する場合、コマンドはssh -2 -L 5678:localhost:5678 -i identityfile user@1.2.3.4となります。-iフラグを使用して ID ファイルへのパスを指定できます。 -
SSH セッションでプロンプトが表示されることを確認します。
-
VS Code ワークスペースで、
launch.jsonファイルにリモートデバッグ用の構成を作成します。ポートはsshコマンドで使用したものと同じにし、ホストをlocalhostに設定します。SSH トンネルを設定したため、ここではlocalhostを使用します。{ "name": "Python Debugger: Attach", "type": "debugpy", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", // Maps C:\Users\user1\project1 "remoteRoot": "." // To current working directory ~/project1 } ] }
デバッグの開始
リモートコンピューターへの SSH トンネルが設定されたので、デバッグを開始できます。
-
両方のコンピューター: 同一のソースコードが利用可能であることを確認してください。
-
両方のコンピューター: debugpy をインストールしてください。
-
リモートコンピューター: リモートプロセスへのアタッチ方法を指定するには 2 つの方法があります。
-
ソースコードに以下の行を追加します。
addressはリモートコンピューターの IP アドレスとポート番号に置き換えてください(IP アドレス 1.2.3.4 は例示のみです)。import debugpy # Allow other computers to attach to debugpy at this IP address and port. debugpy.listen(('1.2.3.4', 5678)) # Pause the program until a remote debugger is attached debugpy.wait_for_client()listenに使用される IP アドレスは、リモートコンピューターのプライベート IP アドレスである必要があります。その後、通常通りプログラムを起動すると、デバッガーがアタッチされるまで一時停止します。 -
debugpy を介してリモートプロセスを起動します。例:
python3 -m debugpy --listen 1.2.3.4:5678 --wait-for-client -m myprojectこれは
python3を使用してパッケージmyprojectを起動します。リモートコンピューターのプライベート IP アドレス1.2.3.4、ポート5678でリッスンします(-mを使用する代わりに./hello.pyのようにファイルパスを指定してリモート Python プロセスを開始することもできます)。
-
-
ローカルコンピューター: 上記のようにリモートコンピューター上のソースコードを変更した場合のみ、ソースコード内にリモートコンピューターに追加したものと同じコードをコメントアウトしたコピーを追加します。これらの行を追加することで、両方のコンピューター上のソースコードが 1 行ずつ一致していることを確認できます。
#import debugpy # Allow other computers to attach to debugpy at this IP address and port. #debugpy.listen(('1.2.3.4', 5678)) # Pause the program until a remote debugger is attached #debugpy.wait_for_client() -
ローカルコンピューター: VS Code で **実行とデバッグ** ビュー(⇧⌘D (Windows, Linux Ctrl+Shift+D))に切り替え、**Python Debugger: Attach** 構成を選択します。
-
ローカルコンピューター: デバッグを開始したいコードにブレークポイントを設定します。
-
ローカルコンピューター: 修正した **Python Debugger: Attach** 構成と「デバッグの開始」ボタンを使用して、VS Code デバッガーを開始します。VS Code はローカルに設定したブレークポイントで停止するはずです。そこからコードのステップ実行、変数の検査、その他すべてのデバッグ操作を行えます。**デバッグコンソール** に入力した式は、リモートコンピューター上でも実行されます。
print文などからの標準出力は、両方のコンピューターに表示されます。ただし、matplotlib などのパッケージからのグラフィカルなプロットなどの他の出力は、リモートコンピューター上にのみ表示されます。 -
リモートデバッグ中、デバッグツールバーは以下のように表示されます。

このツールバーの切断ボタン(⇧F5 (Windows, Linux Shift+F5))はデバッガーを停止し、リモートプログラムを最後まで実行させます。再起動ボタン(⇧⌘F5 (Windows, Linux Ctrl+Shift+F5))はローカルコンピューター上のデバッガーを再起動しますが、リモートプログラムを再起動 しません。再起動ボタンは、リモートプログラムを既に再起動しており、デバッガーを再アタッチする必要がある場合にのみ使用してください。
構成オプションの設定
launch.json を最初に作成する際、エディターでアクティブなファイルを統合ターミナル(VS Code 内)または外部ターミナル(VS Code 外)で実行するための 2 つの標準構成があります。
{
"configurations": [
{
"name": "Python Debugger: Current File (Integrated Terminal)",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "Python Debugger: Current File (External Terminal)",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "externalTerminal"
}
]
}
具体的な設定は以下のセクションで説明されています。また、標準構成には含まれていない args などの他の設定を追加することもできます。
ヒント: プロジェクトでは、特定の起動ファイルを実行する構成を作成するのが便利です。例えば、デバッガーを開始する際に常に
startup.pyを引数--port 1593で起動したい場合は、次のような構成エントリを作成します。
{
"name": "Python Debugger: startup.py",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/startup.py",
"args" : ["--port", "1593"]
},
名前
VS Code のドロップダウンリストに表示されるデバッグ構成の名前を提供します。
type
使用するデバッガーの種類を識別します。Python コードをデバッグする場合は debugpy のままにしてください。
request
デバッグを開始するモードを指定します。
launch:programで指定されたファイルでデバッガーを起動します。attach: すでに実行中のプロセスにデバッガーをアタッチします。例については「リモートデバッグ」を参照してください。
program
Python プログラムのエントリモジュール(起動ファイル)への完全修飾パスを提供します。デフォルトの構成でよく使用される ${file} という値は、エディターで現在アクティブなファイルを使用します。特定の起動ファイルを指定することで、どのファイルが開いていても常に同じエントリポイントでプログラムを起動できます。例:
"program": "/Users/Me/Projects/MyProject/src/event_handlers/__init__.py",
ワークスペースルートからの相対パスに頼ることもできます。例えばルートが /Users/Me/Projects/MyProject の場合、以下の例のように使用できます。
"program": "${workspaceFolder}/src/event_handlers/__init__.py",
module
コマンドラインで実行する際の -m 引数と同様に、デバッグするモジュール名を指定できます。詳細については、Python.org を参照してください。
python
デバッグに使用される Python インタープリターを指すフルパス。
指定がない場合、この設定はワークスペース用に選択されたインタープリターをデフォルトとします。これは ${command:python.interpreterPath} の値を使用するのと同じです。異なるインタープリターを使用するには、デバッグ構成の python プロパティにそのパスを指定してください。
あるいは、各プラットフォームで定義されたカスタム環境変数を使用して Python インタープリターへのフルパスを含めることもでき、他のフォルダーパスを必要としません。
Python インタープリターに引数を渡す必要がある場合は、pythonArgs プロパティを使用できます。
pythonArgs
"pythonArgs": ["<arg 1>", "<arg 2>",...] という構文を使用して、Python インタープリターに渡す引数を指定します。
args
Python プログラムに渡す引数を指定します。スペースで区切られた引数文字列の各要素は、引用符で囲む必要があります。例:
"args": ["--quiet", "--norepeat", "--port", "1593"],
デバッグ実行ごとに異なる引数を提供したい場合は、args を "${command:pickArgs}" に設定できます。これにより、デバッグセッションを開始するたびに引数を入力するように求められます。
注:
"${command:pickArgs}"と["${command:pickArgs}"]の解析方法には違いがあり、特に[]の使用法に注意が必要です。配列として渡すとすべての引数が単一の文字列として渡されますが、括弧がない場合は各引数が個別の文字列として渡されます。
stopOnEntry
true に設定すると、デバッグ対象プログラムの最初の行でデバッガーを停止します。省略(デフォルト)または false に設定した場合、デバッガーは最初のブレークポイントまでプログラムを実行します。
console
redirectOutput のデフォルトが変更されていない限り、プログラム出力がどのように表示されるかを指定します。
| 値 | 出力が表示される場所 |
|---|---|
"internalConsole" |
VS Code デバッグコンソール。 redirectOutput が False に設定されている場合、出力は表示されません。 |
"integratedTerminal" (デフォルト) |
VS Code 統合ターミナル。redirectOutput が True に設定されている場合、デバッグコンソールにも出力が表示されます。 |
"externalTerminal" |
別のコンソールウィンドウ。redirectOutput が True に設定されている場合、デバッグコンソールにも出力が表示されます。 |
purpose
purpose オプションを使用して、**実行** ボタンを構成する方法は複数あります。このオプションを debug-test に設定すると、VS Code でテストをデバッグする際にその構成を使用するよう定義されます。一方、debug-in-terminal に設定すると、エディター右上の **Python ファイルの実行** ボタンにアクセスしたときにのみその構成を使用するよう定義されます(ボタンが提供する **Python ファイルの実行** または **Python ファイルのデバッグ** オプションのどちらが使用されたかに関係なく)。注: purpose オプションは、F5 キーや **実行** > **デバッグの開始** を通じてデバッガーを起動するためには使用できません。
autoReload
デバッガーの実行がブレークポイントに達した後にコードが変更された場合、デバッガーを自動的にリロードできるようにします。この機能を有効にするには、以下のコードのように {"enable": true} を設定します。
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"autoReload": {
"enable": true
}
}
注: デバッガーがリロードを実行すると、インポート時に実行されるコードが再度実行される可能性があります。この状況を回避するには、モジュール内でインポート、定数、定義のみを使用し、すべてのコードを関数内に配置するようにしてください。あるいは、
if __name__=="__main__"チェックを使用することもできます。
subProcess
サブプロセスデバッグを有効にするかどうかを指定します。デフォルトは false で、有効にするには true に設定します。詳細については、「マルチターゲットデバッグ」を参照してください。
cwd
デバッガーの現在の作業ディレクトリを指定します。これはコードで使用される相対パスのベースフォルダーになります。省略した場合は ${workspaceFolder}(VS Code で開いているフォルダー)がデフォルトとなります。
例として、${workspaceFolder} に app.py を含む py_code フォルダーと、salaries.csv を含む data フォルダーがあるとします。py_code/app.py でデバッガーを開始する場合、データファイルへの相対パスは cwd の値によって異なります。
| cwd | データファイルへの相対パス |
|---|---|
省略または ${workspaceFolder} |
data/salaries.csv |
${workspaceFolder}/py_code |
../data/salaries.csv |
${workspaceFolder}/data |
salaries.csv |
redirectOutput
true(internalConsole のデフォルト)に設定すると、デバッガーはプログラムからのすべての出力を VS Code のデバッグ出力ウィンドウに表示します。false(integratedTerminal および externalTerminal のデフォルト)に設定すると、プログラムの出力はデバッガーの出力ウィンドウには表示されません。
このオプションは通常、"console": "integratedTerminal" または "console": "externalTerminal" を使用している場合は無効にされます。これは、デバッグコンソールで出力を複製する必要がないためです。
justMyCode
省略または true(デフォルト)に設定されている場合、デバッグをユーザーが作成したコードのみに制限します。標準ライブラリ関数のデバッグも有効にするには false に設定します。
django
true に設定すると、Django Web フレームワーク固有のデバッグ機能が有効になります。
sudo
true に設定し、"console": "externalTerminal" と併用すると、昇格が必要なアプリのデバッグが可能になります。パスワードを取得するには外部コンソールを使用する必要があります。
pyramid
true に設定すると、Pyramid アプリが 必要な pserve コマンド で確実に起動されるようになります。
env
デバッガープロセス用にシステム環境変数以外のオプションの環境変数を設定します。デバッガーは常にシステム環境変数を継承します。これらの変数の値は文字列として入力する必要があります。
envFile
環境変数定義を含むファイルへのオプションのパス。詳細については「Python 環境の構成 - 環境変数定義ファイル」を参照してください。
gevent
true に設定すると、gevent モンキーパッチコード のデバッグが有効になります。
jinja
true に設定すると、Jinja テンプレートフレームワーク固有のデバッグ機能が有効になります。
ブレークポイントとログポイント
Python Debugger 拡張機能は、コードのデバッグ用に ブレークポイント と ログポイント をサポートしています。基本的なデバッグとブレークポイントの使用方法の簡単なチュートリアルについては、「チュートリアル - デバッガーの構成と実行」を参照してください。
条件付きブレークポイント
ブレークポイントは、式やヒット数、あるいはその両方の組み合わせに基づいてトリガーされるようにも設定できます。Python Debugger 拡張機能は、整数に加えて ==, >, >=, <, <=, % 演算子が付いた整数でのヒット数をサポートしています。例えば、5 回発生した後にトリガーされるブレークポイントを設定するには、ヒット数を >5 に設定します。詳細については、VS Code デバッグのメイン記事にある「条件付きブレークポイント」を参照してください。
コード内でのブレークポイントの呼び出し
Python コード内では、デバッグセッション中にデバッガーを一時停止したい任意の場所で debugpy.breakpoint() を呼び出すことができます。
ブレークポイントの検証
Python Debugger 拡張機能は、pass 文や複数行にわたる文の途中など、実行可能でない行に設定されたブレークポイントを自動的に検出します。このような場合、デバッガーを実行すると、コードの実行がそのポイントで確実に停止するように、ブレークポイントは最も近い有効な行に移動されます。
特定のアプリタイプのデバッグ
構成のドロップダウンには、一般的なアプリタイプに対してさまざまなオプションが用意されています。
| 構成 | 説明 |
|---|---|
| アタッチ | 前のセクションの「リモートデバッグ」を参照してください。 |
| Django | "program": "${workspaceFolder}/manage.py", "args": ["runserver"] を指定します。また、Django HTML テンプレートのデバッグを有効にするために "django": true を追加します。 |
| Flask | 以下の「Flask デバッグ」を参照してください。 |
| Gevent | 標準の統合ターミナル構成に "gevent": true を追加します。 |
| Pyramid | program を削除し、"args": ["${workspaceFolder}/development.ini"] を追加し、テンプレートデバッグを有効にするために "jinja": true を追加します。さらに、必要な pserve コマンド でプログラムが確実に起動されるよう "pyramid": true を追加します。 |
リモートデバッグと Google App Engine にも特定の手順が必要です。テストのデバッグの詳細については、「テスト」を参照してください。
管理者権限が必要なアプリをデバッグするには、"console": "externalTerminal" と "sudo": "True" を使用してください。
Flask デバッグ
{
"name": "Python Debugger: Flask",
"type": "debugpy",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "app.py"
},
"args": [
"run",
"--no-debugger"
],
"jinja": true
},
ご覧のように、この構成では "env": {"FLASK_APP": "app.py"} と "args": ["run", "--no-debugger"] を指定しています。program の代わりに "module": "flask" プロパティが使用されています。(env プロパティ内に "FLASK_APP": "${workspaceFolder}/app.py" が見られる場合は、ファイル名のみを参照するように構成を変更してください。そうしないと、C がドライブ文字である "Cannot import module C" というエラーが表示される可能性があります。)
"jinja": true 設定は、Flask のデフォルトの Jinja テンプレートエンジンのデバッグも有効にします。
Flask の開発サーバーを開発モードで実行したい場合は、以下の構成を使用してください。
{
"name": "Python Debugger: Flask (development mode)",
"type": "debugpy",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "app.py",
"FLASK_ENV": "development"
},
"args": [
"run"
],
"jinja": true
},
トラブルシューティング
デバッガーが動作しない理由には多くの可能性があります。デバッグコンソールで具体的な原因が明らかになることもありますが、主な理由は以下の通りです。
-
**拡張機能** ビュー(⇧⌘X (Windows, Linux Ctrl+Shift+X))を開き、
@installed python debuggerを検索して、Python Debugger 拡張機能 が VS Code にインストールされ、有効になっていることを確認してください。 -
Python 実行可能ファイルへのパスが間違っています: **Python: インタープリターを選択** コマンドを実行し、現在の値を確認して、選択したインタープリターのパスをチェックしてください。

-
launch.jsonファイルで"type"に非推奨の"python"という値が設定されています。Python Debugger 拡張機能と連携させるには、"python"を"debugpy"に置き換えてください。 -
ウォッチウィンドウに無効な式があります: ウォッチウィンドウからすべての式をクリアし、デバッガーを再起動してください。
-
ネイティブスレッド API(Python スレッディング API ではなく、Win32 の
CreateThread関数など)を使用するマルチスレッドアプリで作業している場合、現状ではデバッグしたいファイルの先頭に以下のソースコードを含める必要があります。import debugpy debugpy.debug_this_thread() -
Linux システムで作業している場合、実行中のプロセスにデバッガーを適用しようとすると "timed out" エラーメッセージが表示されることがあります。これを防ぐには、一時的に以下のコマンドを実行できます。
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
次のステップ
- Python environments - 編集およびデバッグに使用する Python インタープリターを制御します。
- テスト - テスト環境を構成し、テストを検出、実行、およびデバッグします。
- 設定リファレンス - VS Code の Python 関連設定の全範囲を調べます。
- 一般的なデバッグ - VS Code のデバッグ機能について学びます。