ステップインでメソッドの中を確認
8.3 ステップインでメソッドの中を確認
ここまでで説明したステップオーバーでは、中断している行で呼び出しているメソッドの処理内容までは追うことができませんでした。しかし、ステップインを使うと、現在停止している行がメソッドを呼び出している場合に限って、そのメソッドの中に入って1ステップ実行します。それによって、自作のメソッドの実行の流れや変数の状態などを追うことができ、意図した通りの動きになっているのかどうかを確かめることができます。
メソッドについては、詳しくは10章で学びます。ここでは、ステップオーバーだけでは追うことができない処理を、ステップインを使えば確認することができるということを理解できればOKです。
では、ステップオーバーとステップインを使って、文字が入力された時の処理がどうなっているのかを確認していきましょう。
8.3.1 ステップオーバーとステップインを使ったデバッグ
先ほどと同じプログラムを使って練習していきます。デバッグパースペクティブから、Javaパースペクティブへ戻して下さい。
1. ブレークポイントを18行目に設定
18行目にブレークポイントを設定してください。
図 8.3.1: 18行目にブレークポイントを設定したソースコード
2. デバッグを開始
DebugTestプログラムのデバッグを開始します。
3. 18行目のブレークポイントで中断したことを確認
図 8.3.2: 18行目のブレークポイントで実行中断中
18行目はreadIntメソッドを呼び出しています。
図 8.3.3: 18行目で中断中のソースコード
4. ステップインをクリック
ステップインアイコンをクリックしてください。
図 8.3.4: ステップインアイコン
図 8.3.5: 34行目で実行中断中
readIntメソッドを呼び出している行でステップインコマンドを実行することで、readIntメソッド内もデバッグ対象になります。そのため、ソースコードを見ると現在行がreadIntメソッドの最初のステップである34行目を指し、そこで中断しています。
図 8.3.6: 34行目で実行中断中
5. 35行目の処理が実行されることを確認
引き続きステップオーバーで1ステップずつ実行していきます。
上図の状態からステップオーバーし、35行目が実行されると、キーボード入力待ちの状態になります。
図 8.3.7: 35行目実行前の実行画面
キーボード入力待ちの状態になったら、値を入力してEnterキーを押します。ここでは「2」を入力しました。
図 8.3.8: キーボード入力がされ35行目実行後のコンソールビュー
6. その後のプログラムの流れや変数に代入された値を確認
さらにステップオーバーを繰り返し、入力した数値が正しく変数playerNumに代入され、正しく「【当たり】」または「【ハズレ】」を表示する処理が行われるかを確認してみましょう。
メソッドの宣言部分の中にもブレークポイントを設定可能
ここでは、中断している行からステップインでメソッドの中に入りましたが、メソッドの中に直接ブレークポイントを設定することも可能です。ブレークポイント、ステップオーバー、再開、ステップインをうまく組み合わせて効率的にデバッグを行いましょう。