コンテンツにスキップ

VSCodeでPythonデバッグ

VSCode でデバッグするときは、Debug アイコンを押して

launch.json ファイルを作成します を押します。

押して、 Python File を選びます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}

選ぶと、Python 用の launch.json が出来がります。
この launch.json には、実行時の引数や、環境変数等を指定することができます。

1
2
3
4
5
      "args": ["test"],
      "env":{
        "HOGE":"FUGAFUGA",
        "PATH":"D:/test;${env:PATH}"
      }

実行する

準備ができたら実行します。
デバッガを実行する場合は「F5」を押します。

ブレークポイント

ブレークポイントとは、デバッガで実行したときに、一時的に停止する箇所のことです。

VSCode の場合、行の左側あたりをクリックすることで追加できます。

ブレークポイントを追加した後にデバッガを実行すると、
その地点で停止して、

その段階の変数の状態を確認したりできます。

作成したブレークポイントは、「ブレークポイント」で確認することができて
ここで ON / OFF することができます。

ブレークポイントの条件式

ブレークポイントは、指定の条件のときのみ止める...といったことができます。

作成方法は、ブレークポイントの一覧から条件を付けたいもののペンアイコンを選択します。

すると、ブレークポイント上に式の入力ができるようになります。

例として、3 の時のみブレークポイントで止めたいとします。
その時は、こんな感じで評価式を入れておきます。

ウォッチ式

ウォッチ式とは、ブレークポイントで停止中の評価式を書くことができます。

たとえば、評価式にこのような値を入れておきます。

すると、 file の中身を評価した結果を表示してくれます。

1
2
3
4
5
6
7
import argparse
import sys

parser = argparse.ArgumentParser()
parser.add_argument('message')

args = parser.parse_args()

評価式には関数を書くこともできるので、例えばこのようなコードがあったとして
実行時に引数を受け取るようなコードがあるときに

ウォッチ式をこのように書いておきます。

結果。
コードで import をしていれば、import したモジュールの関数なども書くことができます。

コールスタック

コールスタックとは、関数の呼び出しの改装状態を表示する機能です。

1
2
3
4
5
def test(message):
    print(message)


test("hoge")

たとえばこのようなコードを実行して、ブレークポイントは print の行にしておきます。

その時のコールスタックはこんな感じです。

1
2
3
4
5
6
7
8
def printMessage(message):
    print(message)


def test(message):
    printMessage(message)

test("hoge")

もう1つ関数を追加した場合、print にブレークポイントを追加して実行すると、

このようになります。

コールスタックをクリックすると、それがコードのうちどの行になるのかを
ハイライトすることもできます。

デバッグコンソール

最後にデバッグコンソール。
デバッグコンソールは、ターミナルを表示するウィンドウと同じ場所にあります。

これはなにかというと、ブレークポイントで止めたタイミングの状態で
スクリプトを実行することができます。

例えば、このようにしたとします。

デバッグコンソールで、このように式に値を代入してみます。

すると、変数の値が書き換わりました。

その状態で実行をすすめると、書き換えた値で実行されていることがわかります。

デバッグコンソールを使用することで、あえて違う値を入れたり
今の値の状態を確認したりといったことが可能になります。