Javaアプリケーションのデバッグ(3)
ステップイン、ステップリターン、ステップオーバー
プログラムを1行ずつ実行するのがステップ実行です。Eclipseのステップ実行機能には「ステップイン」「ステップリターン」「ステップオーバー」があります。ステップインを実行すると、現在の行が呼び出しているメソッドがあればそこに入ります。ステップインしたメソッドから元に戻るにはステップリターンを選びます。ステップインする必要がなければ、ステップオーバーを実行することで次の行へ進みます。では、実際に試してみましょう。先ほどの状態から[ステップインのアイコン]をクリックします。
![図11:[ステップインのアイコン]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/3612/11.gif)
ステップインによって、この行が呼び出しているHelloFuncクラスのコンストラクタ「new HelloFunc()」に入りますので、HelloFuncクラスを開いているエディタービューに現在行が示されます。

しかし、HelloFuncクラスのコンストラクタは記述されていませんので、これ以上ステップインする意味はありません。先に進むためにステップリターンしましょう。[ステップリターンのアイコン]をクリックします。
![図13:[ステップリターンのアイコン]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/3612/13.gif)
ステップリターンによって、HelloDebugクラスに戻ります。この行にはコンストラクタ「new HelloFunc()」の後に、メソッドを実行する「.sumArray(i)」がありますので、先ほどと同じ行が現在行になります。このメソッドに入るために、再度、ステップインしましょう。ステップインによって、HelloFuncクラスを開いているエディタービューのsumArrayメソッドの中に現在行が移ります。

このメソッドをみると、整数配列pが引数として使われていることが分かります。そこで、変数ビューで整数配列「p」を開き、各要素の値を確認します。順に、6、2、4になっています。

では、このメソッドの中で次の処理に進めつつ、配列pの各要素の値の変化を確認しましょう。ステップオーバーを2度行います。
![図16:[ステップオーバーのアイコン]を2回クリック](http://cz-cdn.shoeisha.jp/static/images/article/3612/16.gif)
ステップオーバーを2度行うと、HelloFuncクラスのsumArrayメソッドにあるfor文の繰返しが進み、配列pの要素[0]の値が変化していることが変数ビューで分かります。
![図17:変数ビューで配列pの各要素の値の変化を確認すると、要素[0]がsumArrayメソッドの中で変化していることが分かる](http://cz-cdn.shoeisha.jp/static/images/article/3612/17.gif)
つまり、sumArrayメソッドは受け取った配列の要素[0]を足しこみに用いているので、呼び出し側に戻った時には、元の配列の要素[0]の値が変わってしまっているわけです。これが「1+2+4=7」ではなく「1+2+4=12」が表示されてしまった理由でした。
このように、ブレークポイントの設定とステップ実行機能により、きめ細かいデバッグが可能になります。ただし、デバッグ対象ではないソースにステップインしないように注意しましょう。Javaのクラスライブラリのソースに入り込んでしまい、バグを見失う場合があります。また、今回は割愛しますが、変数ビューで変数の値を強制的に変更することもできます。例外的な処理をテストしたい場合に便利です。
