PythonのIDLEでデバッグを行う方法

Python付属のIDE(総合開発環境)であるIDLE(Integrated DeveLopment Environment)を使ってプログラムのデバッグを行う方法を説明します。

プログラムが期待した通りに動かない場合、コードの各行で何が起きているのか、を確認できると大変便利です。特に、if文や繰り返し処理では、実行の途中で値を直接確認できると嬉しいです。

Python付属のIDLEには、デバッガー(デバッグ機能)が付いていますので、すぐにプログラムのデバッグを行えます。

デバッグとは

プログラムの不具合や誤り(バグ)を見つけ出し、修正する作業のこと。print文で途中の値を出力確認しながら行うこともできますが、都度print文を挿入するのは非効率なため、通常はデバッガーを使います。

デバッガーを巧みに使い始めるとプログラミングは急速に上達します。とても丁寧に説明してみましたので、是非デバッガーを使いこなしてください。

この記事の目次

サンプルプログラムの準備

Windows環境のPythonがインストールされている状態を想定します。まだ、Pythonをインストールしていない場合は、以下を参考にインストールしてください。

https://gammasoft.jp/python/python-install-on-windows/

1. メニューからPythonのIDLEを開きます。

python idle select from menu

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.')

貼り付けたイメージは以下のようになります。

python debug practice code

なお、total への加算は以下のように複合代入を用いることもできます。

// 以下の2つは同じ
total = total + 8
total += 8

また、random.randint()はランダムな整数を返します。

// 1から10までのランダムな整数を加算
total = total + random.randint(1, 10)

3. コードの保存

ドキュメントフォルダ(Documents)に「programpy」フォルダを作成しておきます(好きな名前でも大丈夫です)。ツールバーのメニューから File > Save を選択して、「debugtest.py」という名前で、作成したフォルダに保存します。

デバッガーの起動

以下のようにShellウィンドウのメニューから、 Debug > Debugger を選択します。

python debugger open

以下のようなデバッガーが開くので、4つのチェックボックスはすべてチェックします。

python debugger windos

操作ボタン

デバッグは以下の5つのボタンを操作しながら行います。

Go
プログラムをブレークポイントの直前まで実行。ブレークポイントがない場合は、最後まで実行される。
Step
現在の行を実行して、次の行で停止します。現在の行に関数呼び出しがあるとデバッガーはその関数の中に入ります。
Over
現在の行を実行して、次の行で停止します。現在の行に関数呼び出しがあるとその関数を実行してから次の行で停止します。
Out
現在の関数を最後まで実行して、関数の外に移ります。Step で関数の中に入った場合、Out で関数の外に出ることができます。
Quit
デバッグを終了します。残りのコードは実行されません。もう一度、デバッグを開始するには、最初と同じように、 Debug > Debugger を選択します。

StepOver の違いは、現在の行に関数呼び出しがある場合に、関数の中に入るかどうかです。通常は、関数の中に入らないOver を方をよく用います。

次に実際に操作しながら、デバッグの方法を説明します。

デバッグの方法には、1行ずつ実行しながら確認するステップ実行ブレークポイントを配置して特定の行を確認する方法の2通りあります。

デバッグ方法1:1行ずつ確認する場合(ステップ実行)

デバッガーウィンドウを開いた状態で、以下のようにプログラムのエディタのメニューから Run > Run Module を選択してプログラムを実行します。

python idle select from menu

すると以下のように、デバッガーウィンドウに ‘__main__’.<module>(),line 1:import random と表示され、1行目で停止していることがわかります。

python debug step line 1

次に Over を2回クリックして、以下のようにデバッガーを4行目まで進めてください。

python debug step line 4

Globals(グローバル変数)の欄で、total = 7 になっているのが確認されます。すなわち、プログラムは現在の行の前まで実行されているのがわかります。

エディタウィンドウの方は、以下のように停止している行が網掛けされます。

python debug step line 4 editor

さらに、 Over を3回クリックして、以下のようにデバッガーを7行目で停めます。

python debug step line 7 editor

ここで、今度は Step をクリックしてみます。すると以下のようにライブラリのrandom.randint関数の中に入ります。

python debug step in

同時にrandom.pyのエディタウィンドウも開き、現在停止している行が網掛けされます。

python debug step in editor

5行目でもrandom.randint関数を使用していますが、Over をクリックしたので、関数の中には入りませんでした。ここでは、Step をクリックしたので、関数の中に入りました。

つまり、通常は Over を使用し、関数内をデバッグしたい場合だけ Step を使います。

Out をクリックすると以下のようにrandom.randint関数から出て、元のプログラムに戻ります。

python debug step out

以上のように、1行ずつ変数の値の変化を確認しながらデバッグを行うことができます。

デバッグ方法2:特定の行を確認する場合(ブレークポイントの使用)

ある特定の行だけを確認したい場合は、1行ずつステップ実行するのは効率がよくありません。そのような場合には、着目したい行にブレークポイントを配置します。

例えば、9行目のif文でプログラムを停止したい場合は、以下のようにエディタウィンドウで9行目のところで、右クリックをして Set Breakpoint を選択してください。

python debug set breakpoint

すると、以下のように9行目がハイライトされます。

python debug highlight breakpoint

デバッガーウィンドウが開いていることを確認して、エディタウィンドウのメニューから、Run > Run Module を選択してプログラムを実行します。デバッガーウィンドウが開いていない場合は、ステップ実行の時と同じように、Shellウィンドウのメニューから、 Debug > Debugger を選択して開いてください。

デバッガーが起動すると、以下のように1行目でプログラムが停止します。

python debugger start with breakpoint

次に Go をクリックすると、ブレークポイントを配置した9行目まで一気に実行して、停止します。

python debugger stop at breakpoint

後は、Over (または Step)をクリックしてステップ実行でデバッグを続行します。

ブレークポイントを解除するには、ブレークポイントを配置した行で右クリックして以下のように Clear Breakpoint を選択します。

python debugger clear breakpoint