🚀 VS Code で で入手しましょう!

VS Code での Python デバッグ

Python 拡張機能は、いくつかのタイプの Python アプリケーションに対して、Python Debugger 拡張機能によるデバッグをサポートしています。基本的なデバッグの簡単なウォークスルーについては、チュートリアル - デバッガーの構成と実行を参照してください。Flask チュートリアルも参照してください。どちらのチュートリアルも、ブレークポイントの設定やコードのステップ実行などのコアスキルを示しています。

変数の検査、ブレークポイントの設定、その他の言語に依存しないアクティビティなど、一般的なデバッグ機能については、VS Code デバッグを確認してください。

この記事では主に、特定のアプリタイプやリモートデバッグに必要な手順など、Python 固有のデバッグ構成について説明します。

Python デバッガー拡張機能

Python Debugger 拡張機能は、VS Code 用のPython 拡張機能とともに自動的にインストールされます。スクリプト、Web アプリ、リモートプロセスなど、いくつかのタイプの Python アプリケーション向けにdebugpyによるデバッグ機能を提供します。

インストールされていることを確認するには、拡張機能ビュー (⇧⌘X (Windows、Linux Ctrl+Shift+X)) を開き、@installed python debugger を検索します。結果に Python Debugger 拡張機能が表示されるはずです。

Python Debugger extension shown in installed extensions view in VS Code.

サポートされている Python バージョンに関する情報については、拡張機能のREADMEページを参照してください。

構成の初期化

構成は、デバッグセッション中の VS Code の動作を制御します。構成は、ワークスペースの .vscode フォルダーに格納されている launch.json ファイルで定義されます。

: デバッグ構成を変更するには、コードをフォルダーに保存する必要があります。

デバッグ構成を初期化するには、まずサイドバーの実行とデバッグビューを選択します

Run icon

まだ構成が定義されていない場合は、実行とデバッグボタンと、構成 (launch.json) ファイルを作成するためのリンクが表示されます

Debug toolbar settings command

Python 構成で launch.json ファイルを生成するには、次の手順を実行します

  1. launch.json ファイルを作成するリンク (上の画像で概説) を選択するか、実行 > 構成を開くメニューコマンドを使用します。

  2. デバッガーオプションリストからPython Debuggerを選択します。

  3. コマンドパレットから構成メニューが開き、Python プロジェクトファイルに使用するデバッグ構成のタイプを選択できます。単一の Python スクリプトをデバッグする場合は、表示されるデバッグ構成を選択メニューでPython ファイルを選択します。

    List of Python debugger configuration options

    : 構成が存在しない場合にデバッグパネル、F5、または実行 > デバッグの開始からデバッグセッションを開始すると、デバッグ構成メニューも表示されますが、launch.json ファイルは作成されません。

  4. Python Debugger 拡張機能は、以前に選択した内容 (この場合はPython ファイル) に基づいて事前定義された構成を含む launch.json ファイルを作成して開きます。構成を変更したり (たとえば、引数を追加するなど)、カスタム構成を追加したりすることもできます。

    Configuration json

構成プロパティの詳細については、この記事の後半の標準構成とオプションで説明します。その他の構成についても、この記事の特定のアプリタイプのデバッグで説明します。

追加の構成

デフォルトでは、VS Code は Python Debugger 拡張機能によって提供される最も一般的な構成のみを表示します。リストと launch.json エディターに表示される構成の追加コマンドを使用すると、launch.json に含める他の構成を選択できます。コマンドを使用すると、VS Code は使用可能なすべての構成のリストをプロンプト表示します (必ずPythonオプションを選択してください)

Adding a new Python debugging configuration

プロセス ID を使用してアタッチを選択すると、次の結果が得られます: 構成が追加されました

これらのすべての構成の詳細については、特定のアプリタイプのデバッグを参照してください。

デバッグ中、ステータスバーには現在の構成と現在のデバッグインタープリターが表示されます。構成を選択すると、別の構成を選択できるリストが表示されます

Debugging Status Bar

デフォルトでは、デバッガーは、VS Code 用の Python 拡張機能の他の機能と同様に、ワークスペースに選択されているものと同じインタープリターを使用します。デバッグ専用に別のインタープリターを使用するには、該当するデバッガー構成の launch.jsonpython の値を設定します。または、ステータスバーの Python インタープリターインジケーターを使用して別のインタープリターを選択します。

基本的なデバッグ

Python スクリプトのデバッグのみに関心がある場合は、最も簡単な方法は、エディターの実行ボタンの横にある下矢印を選択し、Python Debugger: Python ファイルをデバッグを選択することです。

Debug button on the top-right of the editor

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

Show all automatic debug configurations option on the run view

ただし、他の種類のアプリケーションをデバッグする場合は、実行とデバッグボタンをクリックして実行ビューからデバッガーを起動できます。

Run the debugger

構成が設定されていない場合、デバッグオプションのリストが表示されます。ここで、適切なオプションを選択して、コードをすばやくデバッグできます。

2 つの一般的なオプションは、現在開いている Python ファイルを実行するためにPython ファイル構成を使用するか、既に実行中のプロセスにデバッガーをアタッチするためにプロセス ID を使用してアタッチ構成を使用することです。

デバッグ構成の作成と使用の詳細については、構成の初期化および追加の構成セクションを参照してください。構成が追加されると、ドロップダウンリストから選択し、デバッグの開始ボタン (F5) を使用して開始できます。

Start debugging button in the Run and Debug view

コマンドラインデバッグ

debugpy が Python 環境にインストールされている場合、デバッガーはコマンドラインから実行することもできます。

debugpy のインストール

python -m pip install --upgrade debugpy を使用してdebugpyを Python 環境にインストールできます。

ヒント: 仮想環境の使用は必須ではありませんが、推奨されるベストプラクティスです。コマンドパレット (⇧⌘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 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 なし オプション。デバッグサーバーからの接続があるまでコードを実行しないことを指定します。この設定を使用すると、コードの最初の行からデバッグできます。
--log-to <path> オプション。ログを保存するための既存のディレクトリへのパスを指定します。
--log-to-stderr なし オプション。debugpy がログを stderr に直接書き込むことを有効にします。
--pid <pid> オプション。デバッグサーバーを挿入する、既に実行中のプロセスを指定します。
--configure-<name> <value> オプション。クライアントが接続する前にデバッグサーバーに認識されている必要があるデバッグプロパティを設定します。このようなプロパティは起動構成で直接使用できますが、アタッチ構成の場合はこの方法で設定する必要があります。たとえば、デバッグサーバーがアタッチ先のプロセスによって作成されたサブプロセスに自動的に自身を挿入しないようにする場合は、--configure-subProcess false を使用します。

: [<arg>] を使用して、コマンドライン引数を起動中のアプリに渡すことができます。

ネットワーク接続を介したアタッチによるデバッグ

ローカルスクリプトデバッグ

別のプロセスによってローカルで呼び出される Python スクリプトをデバッグする必要がある場合があります。たとえば、特定の処理ジョブに対して異なる Python スクリプトを実行する Web サーバーをデバッグしている場合があります。このような場合は、起動後に VS Code デバッガーをスクリプトにアタッチする必要があります

  1. VS Code を実行し、スクリプトを含むフォルダーまたはワークスペースを開き、まだ存在しない場合は、そのワークスペースの launch.json を作成します。

  2. スクリプトコードで、次を追加してファイルを保存します

    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')
    
  3. ターミナル: 新しいターミナルを作成を使用してターミナルを開きます。これにより、スクリプトの選択された環境がアクティブになります。

  4. ターミナルで、debugpy パッケージをインストールします。

  5. ターミナルで、スクリプトを使用して Python を起動します (例: python3 myscript.py)。コードに含まれている「デバッガーのアタッチを待機中」というメッセージが表示され、スクリプトは debugpy.wait_for_client() 呼び出しで停止します。

  6. 実行とデバッグビュー (⇧⌘D (Windows、Linux Ctrl+Shift+D)) に切り替え、デバッガードロップダウンリストから適切な構成を選択し、デバッガーを開始します。

  7. デバッガーは debugpy.breakpoint() 呼び出しで停止し、そこからデバッガーを通常どおりに使用できます。debugpy.breakpoint() を使用する代わりに、UI を使用してスクリプトコードに他のブレークポイントを設定することもできます。

SSH を使用したリモートスクリプトデバッグ

リモートデバッグを使用すると、VS Code 内でローカルにプログラムをステップ実行しながら、リモートコンピューターで実行できます。リモートコンピューターに VS Code をインストールする必要はありません。セキュリティを強化するために、デバッグ時に SSH などの安全な接続をリモートコンピューターに使用する必要がある場合があります。

: Windows コンピューターでは、ssh コマンドを使用するためにWindows 10 OpenSSHをインストールする必要がある場合があります。

次の手順は、SSH トンネルを設定する一般的なプロセスを概説しています。SSH トンネルを使用すると、ポートが公開アクセス用に開かれている場合よりも安全な方法で、リモートで直接作業しているかのようにローカルマシンで作業できます。

リモートコンピューター上

  1. ポートフォワーディングを有効にするには、sshd_config 構成ファイル (Linux では /etc/ssh/、Windows では %programfiles(x86)%/openssh/etc にあります) を開き、次の設定を追加または変更します

    AllowTcpForwarding yes
    

    : AllowTcpForwarding のデフォルトは yes であるため、変更する必要がない場合があります。

  2. AllowTcpForwarding を追加または変更する必要があった場合は、SSH サーバーを再起動します。Linux/macOS では、sudo service ssh restart を実行します。Windows では、services.msc を実行し、サービスリストで OpenSSH または sshd を選択し、再起動を選択します。

ローカルコンピューター上

  1. ssh -2 -L sourceport:localhost:destinationport -i identityfile user@remoteaddress を実行して SSH トンネルを作成します。destinationport に選択したポート、および適切なユーザー名とリモートコンピューターの IP アドレスを user@remoteaddress に使用します。たとえば、IP アドレス 1.2.3.4 でポート 5678 を使用する場合、コマンドは ssh -2 -L 5678:localhost:5678 -i identityfile user@1.2.3.4 になります。-i フラグを使用して、ID ファイルへのパスを指定できます。

  2. SSH セッションでプロンプトが表示されることを確認します。

  3. 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 トンネルがリモートコンピューターに設定されたので、デバッグを開始できます。

  1. 両方のコンピューター: 同じソースコードが利用可能であることを確認してください。

  2. 両方のコンピューター: debugpy をインストールします。

  3. リモートコンピューター: リモートプロセスにアタッチする方法を指定する方法は 2 つあります。

    1. ソースコードで、次の行を追加し、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 アドレスである必要があります。その後、プログラムを通常どおりに起動すると、デバッガーがアタッチされるまで一時停止します。

    2. 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)。

  4. ローカルコンピューター: 上記のようにリモートコンピューターでソースコードを変更した場合のみ、ソースコードで、リモートコンピューターに追加されたものと同じコードのコメントアウトされたコピーを追加します。これらの行を追加すると、両方のコンピューターのソースコードが 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()
    
  5. ローカルコンピューター: VS Code の実行とデバッグビュー (⇧⌘D (Windows、Linux Ctrl+Shift+D)) に切り替え、Python Debugger: Attach 構成を選択します

  6. ローカルコンピューター: デバッグを開始するコードにブレークポイントを設定します。

  7. ローカルコンピューター: 変更された Python Debugger: Attach 構成とデバッグの開始ボタンを使用して、VS Code デバッガーを開始します。VS Code はローカルに設定されたブレークポイントで停止し、コードをステップ実行したり、変数を調べたり、その他すべてのデバッグアクションを実行したりできます。デバッグコンソールに入力した式もリモートコンピューターで実行されます。

    print ステートメントからの stdout へのテキスト出力は、両方のコンピューターに表示されます。ただし、matplotlib などのパッケージからのグラフィカルプロットなどの他の出力は、リモートコンピューターにのみ表示されます。

  8. リモートデバッグ中、デバッグツールバーは次のようになります

    Debugging toolbar during remote debugging

    このツールバーでは、切断ボタン (⇧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 1593startup.py を起動する場合は、次のように構成エントリを作成します

 {
     "name": "Python Debugger: startup.py",
     "type": "debugpy",
     "request": "launch",
     "program": "${workspaceFolder}/startup.py",
     "args" : ["--port", "1593"]
 },

名前

VS Code ドロップダウンリストに表示されるデバッグ構成の名前を提供します。

タイプ

使用するデバッガーのタイプを識別します。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",

モジュール

コマンドラインで実行するときに -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 または 実行 > デバッグの開始からデバッガーを開始するために使用することはできません。

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 デバッガー拡張機能は、コードのデバッグのための ブレークポイントログポイント をサポートしています。基本的なデバッグとブレークポイントの使用に関する簡単なチュートリアルについては、チュートリアル - デバッガーの構成と実行 を参照してください。

条件付きブレークポイント

ブレークポイントは、式、ヒットカウント、または両方の組み合わせに基づいてトリガーするように設定することもできます。Python デバッガー拡張機能は、整数に加えて、==、>、>=、<、<=、および % 演算子が前に付いたヒットカウントをサポートしています。たとえば、ヒットカウントを >5 に設定することで、5 回の発生後にトリガーされるブレークポイントを設定できます。詳細については、メインの VS Code デバッグ記事の 条件付きブレークポイント を参照してください。

コード内のブレークポイントの呼び出し

Python コードでは、デバッグセッション中にデバッガーを一時停止したい任意の時点で debugpy.breakpoint() を呼び出すことができます。

ブレークポイントの検証

Python デバッガー拡張機能は、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 をインポートできません」というエラーが表示される場合があります。ここで、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
},

トラブルシューティング

デバッガーが動作しない理由はたくさんあります。デバッグコンソールで特定の原因が明らかになることもありますが、主な理由は次のとおりです。

  • Python Debugger 拡張機能 がインストールされ、VS Code で有効になっていることを確認してください。そのためには、拡張機能 ビューを開き (⇧⌘X (Windows、Linux Ctrl+Shift+X))、@installed python debugger を検索します。

  • python 実行可能ファイルへのパスが正しくありません: Python: インタープリターを選択 コマンドを実行し、現在の値を確認して、選択したインタープリターのパスを確認してください。

    Troubleshooting wrong Python interpreter when debugging

  • launch.json ファイルで "type" が非推奨値 "python" に設定されています: Python Debugger 拡張機能を使用するには、"python""debugpy" に置き換えてください。

  • ウォッチウィンドウに無効な式があります: ウォッチウィンドウからすべての式をクリアし、デバッガーを再起動してください。

  • ネイティブスレッド API (Python スレッド API ではなく Win32 CreateThread 関数など) を使用するマルチスレッドアプリケーションで作業している場合は、現在、デバッグする任意のファイルの先頭に次のソースコードを含める必要があります。

    import debugpy
    debugpy.debug_this_thread()
    
  • Linux システムで作業している場合、実行中のプロセスにデバッガーを適用しようとすると、「タイムアウト」エラーメッセージが表示されることがあります。これを防ぐには、一時的に次のコマンドを実行できます。

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    

次のステップ

  • Python 環境 - 編集とデバッグに使用する Python インタープリターを制御します。
  • テスト - テスト環境を構成し、テストを検出、実行、およびデバッグします。
  • 設定リファレンス - VS Code の Python 関連のすべての設定を調べます。
  • 一般的なデバッグ - VS Code のデバッグ機能について学びます。