VS Codeのエージェントモードを拡張するには、を試してください!

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 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 デバッガーを選択します。

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

    List of Python debugger configuration options

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

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

    Configuration json

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

追加構成

既定では、VS Code は Python デバッガー拡張機能によって提供される最も一般的な構成のみを表示します。リストと 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 デバッガー: Python ファイルをデバッグを選択するのが最も簡単な方法です。

Debug button on the top-right of the editor

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

Show all automatic debug configurations option on the run view

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

Run the debugger

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

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

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

Start debugging button in the Run and Debug view

コマンドラインデバッグ

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

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> オプション。クライアントが接続する前にデバッグサーバーに認識させる必要があるデバッグプロパティを設定します。このようなプロパティは、*launch* 構成で直接使用できますが、*attach* 構成ではこの方法で設定する必要があります。たとえば、デバッグサーバーがアタッチするプロセスによって作成されたサブプロセスに自動的に注入されないようにするには、--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. ターミナルで、python3 myscript.py のようにスクリプトを使用して Python を起動します。コードに含まれている「Waiting for debugger attach」メッセージが表示され、スクリプトは 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 には選択したポートを使用し、user@remoteaddress には適切なユーザー名とリモートコンピューターの IP アドレスを使用します。たとえば、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. ローカルコンピューター: 上記で概説したようにリモートコンピューターのソースコードを変更した場合のみ、ソースコードにリモートコンピューターに追加されたのと同じコードのコメントアウトされたコピーを追加します。これらの行を追加すると、両方のコンピューターのソースコードが行ごとに一致することが保証されます。

    #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 デバッガー: アタッチ構成を選択します

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

  7. ローカルコンピューター: 変更されたPython デバッガー: アタッチ構成と「デバッグの開始」ボタンを使用して 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 1593 を付けて常に startup.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 インタープリターに渡す引数を指定します。

引数

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 に設定します。

ジャンゴ

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 ステートメントや複数行ステートメントの中間など、実行不可能な行に設定されたブレークポイントを自動的に検出します。そのような場合、デバッガーを実行すると、コードの実行がその時点で停止するように、ブレークポイントが最も近い有効な行に移動します。

特定のアプリタイプのデバッグ

構成ドロップダウンには、一般的なアプリタイプに対してさまざまなオプションが用意されています。

設定 説明
アタッチ 前のセクションの「リモートデバッグ」を参照してください。
ジャンゴ "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 を検索し、VS Code に Python デバッガー拡張機能がインストールされ、有効になっていることを確認します。

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

    Troubleshooting wrong Python interpreter when debugging

  • 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
    

次のステップ

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