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

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

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

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

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

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

Flask、Django、または FastAPI を使用して Web アプリケーションをデバッグする場合、Python デバッガー拡張機能は、Run and Debugビューを通じて、Show all automatic debug configurationsオプションの下に、プロジェクト構造に基づいて動的に作成されたデバッグ構成を提供します。

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

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

コマンドラインデバッグ
debugpy が Python 環境にインストールされている場合、デバッガーはコマンドラインから実行することもできます。
debugpy のインストール
Python 環境に python -m pip install --upgrade debugpy を使用してdebugpy をインストールできます。
ヒント: 仮想環境の使用は必須ではありませんが、推奨されるベストプラクティスです。コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) を開き、Python: 仮想環境の作成コマンド () を実行することで、VS Code で仮想環境を作成できます。
コマンドライン構文
デバッガーのコマンドライン構文は次のとおりです。
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 デバッガー拡張機能からアタッチするために、次の構成を使用します。
{
"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 | なし | オプション。デバッグサーバーからの接続があるまでコードを実行しないことを指定します。この設定により、コードの最初の行からデバッグできます。 |
| --log-to | <path> |
オプション。ログを保存するための既存のディレクトリへのパスを指定します。 |
| --log-to-stderr | なし | オプション。debugpy がログを stderr に直接書き込むことを有効にします。 |
| --pid | <pid> |
オプション。デバッグサーバーを挿入する、既に実行中のプロセスを指定します。 |
| --configure-<name> | <value> |
オプション。クライアントが接続する前にデバッグサーバーに知られている必要があるデバッグプロパティを設定します。このようなプロパティは起動構成で直接使用できますが、アタッチ構成ではこの方法で設定する必要があります。たとえば、デバッグサーバーがアタッチ先のプロセスによって作成されたサブプロセスに自動的に挿入されないようにするには、--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 パッケージをインストールします。
-
ターミナルで、スクリプトを使用して Python を起動します。たとえば、
python3 myscript.py。コードに含まれている「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を使用する代わりにファイルパスを指定してリモート Python プロセスを起動することもできます。たとえば、./hello.py)。
-
-
ローカルコンピューター: 上記で概説したようにリモートコンピューターのソースコードを変更した場合のみ、ソースコードに、リモートコンピューターに追加されたのと同じコードのコメントアウトされたコピーを追加します。これらの行を追加すると、両方のコンピューターのソースコードが行ごとに一致することが保証されます。
#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 などの他の設定を追加することもできます。
ヒント: プロジェクトでは、特定の起動ファイルを実行する構成を作成すると役立つことがよくあります。たとえば、デバッガーを開始するときに常に引数
--port 1593を指定してstartup.pyを起動したい場合は、次のように構成エントリを作成します。
{
"name": "Python Debugger: startup.py",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/startup.py",
"args" : ["--port", "1593"]
},
name
VS Code のドロップダウンリストに表示されるデバッグ構成の名前を指定します。
type
使用するデバッガーの種類を識別します。Python コードのデバッグには、これを debugpy に設定したままにします。
要求
デバッグを開始するモードを指定します。
launch:programで指定されたファイルでデバッガーを開始します。attach: 既に実行中のプロセスにデバッガーをアタッチします。例については、「リモートデバッグ」を参照してください。
プログラム
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 に設定した場合、デバッガーはプログラムを最初のブレークポイントまで実行します。
コンソール
redirectOutput のデフォルトが変更されていない限り、プログラム出力の表示方法を指定します。
| 値 | 出力が表示される場所 |
|---|---|
"internalConsole" |
VS Code デバッグコンソール。 redirectOutput が False に設定されている場合、出力は表示されません。 |
"integratedTerminal" (デフォルト) |
VS Code 統合ターミナル。redirectOutput が True に設定されている場合、出力はデバッグコンソールにも表示されます。 |
"externalTerminal" |
個別のコンソールウィンドウ。redirectOutput が True に設定されている場合、出力はデバッグコンソールにも表示されます。 |
目的
purpose オプションを使用すると、実行ボタンを構成する方法が複数あります。このオプションを debug-test に設定すると、VS Code でテストをデバッグするときにこの構成を使用する必要があることを定義します。ただし、このオプションを debug-in-terminal に設定すると、エディターの右上にあるPython ファイルの実行ボタンにアクセスするときにのみこの構成を使用する必要があることを定義します (ボタンが提供するPython ファイルの実行またはPython ファイルのデバッグオプションのどちらを使用するかに関係なく)。注: purpose オプションは、F5 または実行 > デバッグの開始を介してデバッガーを開始するために使用できません。
自動リロード
デバッガーの実行がブレークポイントに達した後にコードに変更が加えられたときに、デバッガーを自動的に再ロードできるようにします。この機能を有効にするには、次のコードに示すように {"enable": true} を設定します。
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"autoReload": {
"enable": true
}
}
注: デバッガーが再ロードを実行すると、インポート時に実行されるコードが再度実行される可能性があります。この状況を回避するには、モジュール内でインポート、定数、および定義のみを使用し、すべてのコードを関数内に配置するようにしてください。または、
if __name__=="__main__"チェックを使用することもできます。
サブプロセス
サブプロセスデバッグを有効にするかどうかを指定します。デフォルトは 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" とともに使用されると、昇格が必要なアプリのデバッグを許可します。パスワードをキャプチャするには、外部コンソールを使用する必要があります。
ピラミッド
true に設定すると、Pyramid アプリが必要な pserve コマンドで起動されることを保証します。
環境
デバッガーが常に継承するシステム環境変数に加えて、デバッガープロセスにオプションの環境変数を設定します。これらの変数の値は文字列として入力する必要があります。
envFile
環境変数定義を含むファイルのオプションのパス。 「Python 環境の構成 - 環境変数定義ファイル」を参照してください。
gevent
true に設定すると、gevent モンキーパッチコードのデバッグが有効になります。
ジンジャ
true に設定すると、Jinja テンプレートフレームワークに固有のデバッグ機能がアクティブになります。
ブレークポイントとログポイント
Python デバッガー拡張機能は、コードのデバッグ用にブレークポイントとログポイントをサポートしています。基本的なデバッグとブレークポイントの使用の簡単なチュートリアルについては、「チュートリアル - デバッガーを構成して実行する」を参照してください。
条件付きブレークポイント
ブレークポイントは、式、ヒット数、またはその両方の組み合わせに基づいてトリガーするように設定することもできます。Python デバッガー拡張機能は、==、>、>=、<、<=、および % 演算子の前に整数が付いた整数に加えて、ヒット数をサポートしています。たとえば、>5 のヒット数を設定することで、5 回発生した後にトリガーされるようにブレークポイントを設定できます。詳細については、メインの VS Code デバッグ記事の「条件付きブレークポイント」を参照してください。
コードでブレークポイントを呼び出す
Python コードでは、デバッグセッション中にデバッガーを一時停止したい任意の場所で debugpy.breakpoint() を呼び出すことができます。
ブレークポイントの検証
Python デバッガー拡張機能は、pass ステートメントや複数行ステートメントの中間など、実行不可能な行に設定されたブレークポイントを自動的に検出します。そのような場合、デバッガーを実行すると、コード実行がその点で停止するように、ブレークポイントが最も近い有効な行に移動します。
特定のアプリタイプのデバッグ
構成ドロップダウンは、一般的なアプリタイプに対してさまざまなオプションを提供します。
| 設定 | 説明 |
|---|---|
| アタッチ | 前のセクションの「リモートデバッグ」を参照してください。 |
| Django | "program": "${workspaceFolder}/manage.py", "args": ["runserver"] を指定します。また、Django HTML テンプレートのデバッグを有効にするために "django": true を追加します。 |
| フラスコ | 以下の「Flask デバッグ」を参照してください。 |
| Gevent | 標準の統合ターミナル構成に "gevent": true を追加します。 |
| ピラミッド | 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" が表示される場合があります。その場合、ファイル名のみを参照するように構成を変更してください。そうしないと、「Cannot import module C」というエラーが表示される場合があります。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 デバッガー拡張機能が VS Code にインストールされ、有効になっていることを確認します。 -
Python 実行可能ファイルへのパスが正しくありません: Python: インタープリターの選択コマンドを実行し、現在の値を確認して、選択したインタープリターのパスを確認します。

-
launch.jsonファイルで"type"が非推奨の値"python"に設定されています: Python デバッガー拡張機能で動作するように"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