Javaアプリケーションのデバッグ(2)
ブレークポイントの設定と変数の値の参照
今回はメソッドの呼び出し前と呼出し後の変数の値に問題がありそうです。そこで、sumArray(int[])
メソッドを呼び出している2つの行でプログラムを一時停止して、変数の値をチェックしてみましょう。
プログラムを一時停止するために、ブレークポイントを設定します。ある行にブレークポイントを設定するには、エディタビューでその行の左側をクリックするか、その行にカーソルがあるときに[Ctrl]+[Shift]+[b]キーを押すか、メニューから[実行(R)]-[ブレークポイントの切替(K)]を実行します。ブレークポイントが設定された行には●印が表示されます。
![図2:行の左側をクリックしてブレークポイントを設定](http://cz-cdn.shoeisha.jp/static/images/article/3612/02.gif)
ブレークポイントを設定し、そこで実行を停止するにはデバッグモードで実行する必要があります。[デバッグアイコン]をクリックするか、メニューから[実行(R)]-[デバッグ(D)]を実行します。
![図3:[デバッグアイコン]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/3612/03.gif)
「パースペクティブ切り替えの確認」ダイアログが表示されます。ダイアログに記述されているとおり、デバッグを実行すると、パースペクティブが「Java」から「デバッグ」に切り替わります。毎回確認する必要はないでしょうから、「常にこの設定を使用する(R)」をチェックして[はい]をクリックします。
パースペクティブが「デバッグ」に切り替わり、パッケージエクスプローラービューの代わりに、ウィンドウ上部に「デバッグビュー」と「変数/ブレークポイントビュー」が表示されます。また、エディタービューには1つめのブレークポイントで停止していることが示されます。なお、プログラムが最初の「System.out.println(…)
」の手前で一時停止しているので、コンソールビューにはまだ何も表示されていません。
この時点での変数の値を確認します。変数ビューにある配列「i
」の左側のアイコンをクリックすると配列の各要素のこの時点での値が表示されます。まだ、sumArray(int[])
メソッドを呼び出していませんので、初期化したままの状態なのが分かります。
![図6:変数ビューで配列の各要素の現在の値を確認](http://cz-cdn.shoeisha.jp/static/images/article/3612/06.gif)
では、プログラムを再開して、次のブレークポイントまで進めましょう。[再開アイコン]をクリックします。
![図7:[再開アイコン]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/3612/07.gif)
エディタービューを見ると、次のブレークポイントまで処理が進み、ここでまた一時停止していることが分かります。
![図8:プログラムが2つめのブレークポイントで停止している](http://cz-cdn.shoeisha.jp/static/images/article/3612/08.gif)
また、最初の「System.out.println(…)
」が実行されているので、コンソールビューには1行目の「1+2+3=6
」が表示されています。
![図9:コンソールビューに1行目が表示されている](http://cz-cdn.shoeisha.jp/static/images/article/3612/09.gif)
そして、1回目のsumArray(int[])
メソッドの呼び出しにより、変数「ans
」に値「6
(=1+2+3)」が代入されるので、変数ビューに変数「ans
」とその値である「6
」が表示されます。また、その後で、配列のi[2]
に4
を代入しているので、変数ビューのi
の[2]
の値が「4
」に変わっています。ところが、i
の[0]
の値が「6
」になってしまっています。変数ビューでは1つ前のブレークポイントから変化があった変数を黄色で示しますので、予期せぬ変化を発見しやすいのがメリットです。
![図10:変数ビューに変数「ans」とその値が追加され、iの[0]と[2]の値が変わっている](http://cz-cdn.shoeisha.jp/static/images/article/3612/10.gif)
これで、「1+2+4=7
」と表示されなかったというバグ解決の手がかりがつかめました。では、ここからステップ実行機能を用いて、より細かい問題分析を行います。