デバッグ実行の活用
ブレークポイントとデバッグ実行の基礎を理解してもらえたところで、応用させていきましょう。
ブレークポイントは複数設置できる
ブレークポイントは、いくつも設置することが可能です。例えば、図10は、7行目(リスト1では(3))だけでなく、9行目(リスト1では(5))にもブレークポイントを設置した画面です。
この状態でデバッグ実行をすると、図6と同様に1カ所目のブレークポイント(7行目)で処理が一時停止されます。その状態で、ボタン(再開ボタン)をクリックすると、次のブレークポイントまで実行され、そこで一時停止します(図11)。
図8の変数ビューとは違い、7行目(リスト1では(3))や8行目(リスト1では(4))で用意した変数addや変数ansが増えているのが確認できます。このように複数のブレークポイントを設置し、それぞれで処理を一時停止→再開を繰り返し、変数の値を確認することで、より効率よくデバッグが行えます。
ブレークポイントの除去
設置したブレークポイントを除去する場合は、ブレークポイントを表すアイコンをダブルクリックするだけです。ただし、さまざまなファイルのありとあらゆる箇所にブレークポイントを設置した場合、どこに設置したかわからなくなることも多々あります。
場合によっては、ブレークポイントを除去し忘れて、デバッグ実行時に思わぬところで処理が一時停止されてしまうこともあります。そのような場合に便利なのが、ブレークポイントビューです。デバッグパースペクティブでは、デフォルトで変数ビューの横にタブが配置されています(図12)。
このビューでは、現在のワークスペース中に存在するブレークポイントが一覧表示されます。リストからブレークポイントを選択し、ボタン(選択ブレークポイントの除去ボタン)をクリックすると、そのブレークポイントが除去されます。さらに、ボタン(全ブレークポイントの除去ボタン)をクリックすると、全てのブレークポイントが除去されます。
処理を1行ずつ実行するステップオーバー
処理の一時停止→再開の究極形は、1行ずつ処理を行うことです。場合によっては、そのようなデバッグ実行をしたい場合もあります。となると、各行にブレークポイントを設置しなければならないように思いますが、Eclipseには1行ずつ処理を行う機能があります。それが、ステップ実行です。
例えば、図13は6行目(リスト1では(2))にブレークポイントを設置し、そこで処理が一時停止されている状態です。
この状態で、ツールバー上のボタン(ステップオーバーボタン)をクリックすると、6行目(リスト1では(2))の処理が実行され、7行目(リスト1では(3))で処理が一時停止します(図14)。
変数タブでは、図13にはなかった変数num2の値が表示されています。このように、コード1行ずつ処理を行いながら、変数の値を確認できるのがステップオーバーです。
メソッド内部の処理をステップ実行できるステップイン
このステップオーバーを繰り返していき、8行目(リスト1では(4))で一時停止している状態でステップオーバーボタンをクリックすると、8行目の処理が実行されて、9行目で一時停止となります。これは、正常な動作です。
一方、8行目ではAdditionクラスのplus()メソッドを呼び出しています。つまり、この行での実際の処理は、plus()メソッド内に処理が移管されているということであり、そこでさらに複数行の処理が行われていることになります。この呼び出し先メソッドでもステップ実行をしたい場合に利用するのが、ボタンのステップインです。実際に行ってみましょう。図15は、8行目(リスト1では(4))で一時停止している状態です。
ここで、ボタン(ステップインボタン)をクリックします。すると、画面が図16のように変わり、Additionクラスのplus()メソッド内をステップ実行している画面になります。
もちろん、この画面でステップオーバーを行うことで、メソッド内の処理を1行ずつ行うことが可能です。試しに、図16の状態でボタン(ステップオーバーボタン)をクリックすると、図17の画面になります。
これは、plus()メソッド内の最終行で一時停止している状態です。ここでさらにステップオーバーを実行すると、図15の画面に戻ります。これで、処理が元のmain()メソッドに戻ったことがわかります。
このようにして、ブレークポイントとステップ実行を活用することで、非常に効率よくデバッグできるようになります。