Python付属のIDE(総合開発環境)であるIDLE(Integrated DeveLopment Environment)を使ってプログラムのデバッグを行う方法を説明します。
プログラムが期待した通りに動かない場合、コードの各行で何が起きているのか、を確認できると大変便利です。特に、if文や繰り返し処理では、実行の途中で値を直接確認できると嬉しいです。
Python付属のIDLEには、デバッガー(デバッグ機能)が付いていますので、すぐにプログラムのデバッグを行えます。
デバッグとは
プログラムの不具合や誤り(バグ)を見つけ出し、修正する作業のこと。print文で途中の値を出力確認しながら行うこともできますが、都度print文を挿入するのは非効率なため、通常はデバッガーを使います。
デバッガーを巧みに使い始めるとプログラミングは急速に上達します。とても丁寧に説明してみましたので、是非デバッガーを使いこなしてください。
この記事の目次
サンプルプログラムの準備
Windows環境のPythonがインストールされている状態を想定します。まだ、Pythonをインストールしていない場合は、以下を参考にインストールしてください。
PythonをWindowsにインストールしてプログラミング学習を始める
https://gammasoft.jp/python/python-install-on-windows/
1. メニューからPythonのIDLEを開きます。
2. エディタを開いて、コードを貼り付ける
ツールバーのメニューから File ▶ New File を選択すると新しいウィンドウが開きます。そこに、以下のプログラムコードをコピーして貼り付けてください。
import random
total = 7
total = total + 8
total = total + random.randint(1, 10)
total = total + 5
total = total + random.randint(1, 10)
if total > 30:
print('total is over 30.')
else:
print('total is equal or less than 30.')
貼り付けたイメージは以下のようになります。
なお、total への加算は以下のように複合代入を用いることもできます。
# 以下の2つは同じこと
total = total + 8
total += 8
また、random.randint()はランダムな整数を返します。
# 1から10までのランダムな整数を加算
total = total + random.randint(1, 10)
3. コードの保存
ツールバーのメニューから File ▶ Saveを選択して、「debugtest.py」という名前で適当なフォルダに保存します。
IDLEの使い方の基本は以下のページを参考にしてください。
デバッガーの起動
以下のようにShellウィンドウのメニューから、Debug ▶ Debuggerを選択します。
以下のようなデバッガーが開くので、4つのチェックボックスはすべてチェックします。
操作ボタン
デバッグは以下の5つのボタンを操作しながら行います。
Go | プログラムをブレークポイントの直前まで実行。ブレークポイントがない場合は、最後まで実行される。 |
Step | 現在の行を実行して、次の行で停止します。現在の行に関数呼び出しがあるとデバッガーはその関数の中に入ります。 |
Over | 現在の行を実行して、次の行で停止します。現在の行に関数呼び出しがあるとその関数を実行してから次の行で停止します。 |
Out | 現在の関数を最後まで実行して、関数の外に移ります。Step で関数の中に入った場合、関数の外に出ることができます。 |
Quit | デバッグを終了します。残りのコードは実行されません。もう一度、デバッグを開始するには、最初と同じように、 Debug ▶ Debugger を選択します。 |
Step とOver の違いは、現在の行に関数呼び出しがある場合に、関数の中に入るかどうかです。通常は、関数の中に入らないOver を方をよく用います。
デバッグの方法には、以下の2通りがあります。以下でそれぞれ実際に操作しながら説明します。
- 1行ずつ実行しながら確認するステップ実行
- ブレークポイントを配置して特定の行を確認する方法
デバッグ方法1:1行ずつ確認する場合(ステップ実行)
デバッガーウィンドウを開いた状態で、以下のようにプログラムのエディタのメニューから Run ▶ Run Moduleを選択してプログラムを実行します。
すると以下のように、デバッガーウィンドウに ‘__main__’.<module>(),line 1:import random と表示され、1行目で停止していることがわかります。
次に「Over」を2回クリックして、以下のようにデバッガーを4行目まで進めてください。
Globals(グローバル変数)の欄で、total = 7 になっているのが確認されます。すなわち、プログラムは現在の行の前まで実行されているのがわかります。
エディタウィンドウの方は、以下のように停止している行が網掛けされます。
さらに、「Over」を3回クリックして、以下のようにデバッガーを7行目で停めます。
ここで、今度は「Step」をクリックしてみます。すると以下のようにライブラリのrandom.randint関数の中に入ります。
同時にrandom.pyのエディタウィンドウも開き、現在停止している行が網掛けされます。
5行目でもrandom.randint関数を使用していますが、Over をクリックしたので、関数の中には入りませんでした。ここでは、Step をクリックしたので、関数の中に入りました。
つまり、通常は Over を使用し、関数内をデバッグしたい場合だけ Step を使います。
「Out」をクリックすると以下のようにrandom.randint関数から出て、元のプログラムに戻ります。
以上のように、1行ずつ変数の値の変化を確認しながらデバッグを行うことができます。
デバッグ方法2:特定の行を確認する場合(ブレークポイントの使用)
ある特定の行だけを確認したい場合は、1行ずつステップ実行するのは効率がよくありません。そのような場合には、着目したい行にブレークポイントを配置します。
例えば、9行目のif文でプログラムを停止したい場合は、以下のようにエディタウィンドウで9行目のところで、右クリックをして Set Breakpoint を選択してください。
すると、以下のように9行目がハイライトされます。
デバッガーウィンドウが開いていることを確認して、エディタウィンドウのメニューから、Run ▶ Run Moduleを選択してプログラムを実行します。デバッガーウィンドウが開いていない場合は、ステップ実行の時と同じように、Shellウィンドウのメニューから、Debug ▶ Debuggerを選択して開いてください。
デバッガーが起動すると、以下のように1行目でプログラムが停止します。
次に「Go」をクリックすると、ブレークポイントを配置した9行目まで一気に実行して、停止します。
後は、Over (または Step)をクリックしてステップ実行でデバッグを続行します。
ブレークポイントを解除するには、ブレークポイントを配置した行で右クリックして以下のように Clear Breakpoint を選択します。