はじめに
CやC++においてVSCodeの拡張でデバックを行ったことがあるのですが、Pythonでも簡単に導入できたので記事にしました。
注意
VSCodeと書いていますが、実際にはCursorを使用しています。どちらでもほぼ同じ形で使用できると思います。
VSCodeのデバックを導入することで出来るようになること
- 全ての変数の値がわかる
- ブレークポイントを設定して、プログラムを途中で止めながら順番に確認する事ができる
- print文を書かなくて良くなる
導入
VSCodeの拡張機能をインストールします
画面左側の「launch.jsonファイルを作成します」をクリックすると、今開いているプロジェクトのルートに.vscode
ディレクトリとlaunch.json
が作成される。
launch.json
に実行するpythonのパスを追加することが出来る。
"python": "path/to/python",
デバックの実行
画面左側のメニューに「実行とデバック」という項目があるので選択する。実行とデバックをクリックするだけで実行は出来る。
またはPythonファイルを開いた状態だと、画面右上に「▶」の実行ボタンが表示される。
「▽」をクリックし「Pythonファイルのデバック」をクリックすることでも実行可能
または画面左側にこのように表示されている場合は「▶」を押すだけで実行できます。
ブレークポイント
下図のようにプログラムの行数が表示されている部分の左側をクリックすると「赤い◯」が表示されます。
これがブレークポイントです。この部分まで来たら処理を止めたり、次のブレークポイントまで一気に処理を進めたりすることが出来ます。
ブレークポイントがあるところで処理を止めて、その時の変数の値を確認するのが基本的な使い方です
ブレークポイントを設定して実行すると以下のような表示になります。これはブレークポイントでプログラムが止まっていることを示しています。
デバックの操作
デバックを実行すると画面上部にバーが表示されます。またカーソルを当てると機能が分かります。
左から
-
6点マーク
ここをクリックしてドラッグするとバーの位置を動かせる -
▶:続行
次のブレークポイントまでプログラムを実行 -
↷:ステップオーバー
1行だけプログラムを実行(関数の場合、関数の中に入らない) -
↓:ステップイン
1行だけプログラムを実行(関数の場合、関数の中に入る) -
↑:ステップアウト
関数の中から抜け出す。 -
↺:再起動
プログラムを再実行する -
□:停止
プログラムの実行を停止する
画面の見方
画面左側のメニューで「実行とデバック」を選択すると下記のような表示がされています。
変数
ウォッチ式
式を自身で定義する。プログラムを順番に実行していく間に変数の値が変わることもあります。その変数が変わったのを監視して、その変数を用いた式を再評価します。
コールスタック
関数がネスト、入れ子になっていくとメモリ上に順番が記憶されていきます。(ざっくりした説明です。詳しくはC言語やメモリに関して調べてください)
関数がどの順番で実行されているかが分かります。
デバックコンソール
ターミナルを開くと、デバックコンソールという欄があります。
このターミナルに変数を入力するとその変数の値が返ってきます。配列やnumpy、index指定、等式や不等式も入力できます。
私は左側の変数一覧よりも、デバックコンソールで値を確認することが多いです
注意点
使用するpythonの指定
プロジェクトのルートに.vscode/launch.json
を作成し、使用するpythonのパスを指定します。
anacondaなどの仮想環境を用いている場合はwhich python
とターミナルに入力して、現在使用している環境のpythonのパスを指定しましょう。
"python": "path/to/python",
絶対パスで実行される
実行ボタンを押すと絶対パスで実行されるため、相対パスでのimportや、ファイル読み込みなどのパスには注意が必要です。
sys.path.append('..')
のような記述がある場合は絶対パスに変更したり、適宜PYTHONPATHを追加するなどの対応を取ってください。
ここではパスに関する説明は省略します。また、実行するディレクトリの指定も可能かもしれませんが調査していません。
最後に
私もデバック機能の全てを使いこなせているわけではないのですが、処理を止めながら途中の変数の値を見られるようになるだけでも大分変わります!
私もついprint()デバックをしてしまうこともありますが、ぜひデバック機能も活用してみてください。
最後まで読んでいただきありがとうございました。