連載
» 2018年06月05日 05時00分 公開

VS CodeでPythonコードのデバッグも楽々!!Visual Studio Codeで始めるPythonプログラミング(2/4 ページ)

[かわさきしんじ,Insider.NET編集部]

デバッグの構成

 「デバッグの構成」とは、Pythonプログラムをどのような構成でデバッグするかを指定するものだ。本稿執筆時点(2018年6月4日)では、以下のような構成がデフォルトではサポートされている(一部抜粋)。

  • [Python: Current File]:VS Codeでアクティブになっているファイルをデバッグのエントリポイントとする
  • [Python: Attach]:実行中のPythonプログラムにアタッチしてデバッグを行う
  • [Python: Terminal (integrated)]:プログラムの出力先を統合ターミナルにしてデバッグ実行を行う
  • [Python: Terminal (external)]:プログラムの出力先の外部ターミナルにして(コマンドプロンプトやbashのウィンドウを別に開いて)、デバッグ実行を行う
  • [Python: Django]:Djangoを使用してWebアプリを開発している際に使用する
  • [Python: Flask]:Flaskを使用してWebアプリを開発している際に使用する
  • [Python: Module]:特定のモジュールのデバッグを行う際に使用する

 構成を行うには[デバッグ]ビューにある歯車ボタンをクリックする。これにより、何の準備もせずにデバッグを開始したときと同様に[環境の選択]を行うメニューが表示されるので、先ほどと同様に[Python]を選択する。これにより、launch.jsonファイルが作成され、そこにデフォルトのデバッグの構成情報が生成される。このとき、.pyファイル以外がVS Codeでアクティブになっていると、[環境の選択]の選択肢にNode.jsなど、他の言語も表示されるので注意しよう。

歯車ボタンをクリック
歯車ボタンをクリック
[Python]を選択
[Python]を選択
デバッグの構成情報を記述したlaunch.jsonファイルが生成される
デバッグの構成情報を記述したlaunch.jsonファイルが生成される

デバッグの構成情報を記述したlaunch.jsonファイルの生成


 作成したデバッグの構成は、既に述べた通り、[デバッグの開始]ボタンの隣にあるドロップダウンに表示される。ここでは、[Python: Current File]を選択しておこう(デフォルトでこれが選択されているはずだ)。

デバッグ構成の一覧 デバッグ構成の一覧

 デバッグ構成を行っておけば、[デバッグの開始]ボタンをクリックしたときに[環境の選択]を行うことなく、スムーズにデバッグ実行が開始される。launch.jsonファイルの詳しい内容については後で見るとして、ここでは[Python: Current File]構成に1つだけ項目を追加しよう。launch.jsonファイルをエディタに開き、次のコードで強調表示された行を追加する。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "stopOnEntry": true
    },
    // …… 省略 ……
  ]
}


stopOnEntry項目をtrueに設定

 stopOnEntry項目をtrueにすると、デバッグ実行開始時に実行が中断されるようになる。そのため、プログラム開始時からステップ実行を行いたいといった場合には便利な項目だ。

デバッグ構成を利用してデバッグをしよう!

 では、[デバッグの開始]ボタンをクリックして、デバッグ実行を始めよう。すると、次の画像のように関数fib1を定義する直前の状態で実行が中断される。現在実行しようとしている行は、エディタ左端の黄色の三角形(と黄色の背景色)で示される。

デバッグを開始したところ デバッグを開始したところ

 また、ウィンドウ上部にはデバッグ用のツールバーが表示され、さまざまな操作を行えるようになっている。

デバッグ用のツールバー デバッグ用のツールバー

 このツールバーには左から順に以下の要素が用意されている。

  • グラブハンドル:ツールバーを左右に移動して、デバッグの邪魔にならないようにする
  • [続行]ボタン:中断したプログラムの実行を続行する
  • [ステップ オーバー]ボタン:現在行を実行する。行に関数呼び出しが含まれているときには、その関数を呼び出して、関数呼び出し後の行で実行を中断する
  • [ステップ インする]ボタン:現在行を実行する。行に関数呼び出しが含まれているときには、その関数の先頭行で実行を中断する
  • [ステップ アウト]ボタン:現在実行中の関数を最後まで実行して、その関数を呼び出した次の行で実行を中断する
  • [再起動]ボタン:デバッグを最初からやり直す
  • [停止]ボタン:デバッグを終了する

 例えば、以下はデバッグ実行を開始して、[ステップ オーバー]ボタンを一度クリックしたところだ。

ステップオーバーにより、関数fib1の定義が終わり、関数fib2を定義する直前で実行が中断したところ ステップオーバーにより、関数fib1の定義が終わり、関数fib2を定義する直前で実行が中断したところ

 ここで注意したいのは、[デバッグ]ビューにある[変数]ウィンドウだ。ここには、Python処理系により自動的に定義される変数、プログラマーが記述して、現在のスコープに存在する変数や関数などが表示される。上の画像を見ると、[変数]ウィンドウの一番下に「fib1」はあるが、「fib2」はまだない。このことからも、現在は関数fib2の定義前であることが分かる。

 ただ、「この辺のコードには問題がない」ことが分かりきっているので、「一度にここまで実行を進めてしまいたい」と感じることもある。そうしたときに、使えるものが2つある。1つはブレークポイントで、もう1つはコードを右クリックしたときにコンテキストメニューに表示される[カーソル行の前まで実行]項目だ。ブレークポイントについては後で見るとして、取りあえず後者を試してみよう。

[カーソル行の前まで実行]を選択
[カーソル行の前まで実行]を選択
直前の行までが実行され、[Python Debug Console]にも関数fib1を使用して得たフィボナッチ数が表示された
直前の行までが実行され、[Python Debug Console]にも関数fib1を使用して得たフィボナッチ数が表示された

「ここまで実行してもいいだろう」という位置を右クリックして、コンテキストメニューから[カーソル行の前まで実行]を選択


 ブレークポイントは設定したり設定を解除したりするのに一手間二手間が必要になる。そのためブレークポイントを設定することなく、「この辺がちょっと気になる」という部分まで実行を進めるときには、この機能が便利に使えるはずだ。

 次にブレークポイントを見ていくが、その前に[続行]ボタンか[停止]ボタンをクリックして、デバッグ実行を終了しておこう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。