エラー多発でも大丈夫! デバッグでのお助け機能
プログラミングはうまく動けば楽しいのですが、なかなかエラーが修正できないと辛いものです。Eclipseにはエラーを取り除く(デバッグ)ための便利な機能がいくつかありますので、それをご紹介します。
エラーの箇所に移動する([Ctrl]+[.])
Eclipseでは、コンパイルエラーが発生した箇所は、行の先頭に赤い×印のアイコンが表示されます。Javaはコンパイラ型言語ですので、これらのエラーをすべて取り除かないとアプリケーションを実行できません。Eclipseでは、ソースコード上で[Ctrl]+[.(ドット)]を押下すると、コンパイルエラーになった箇所にフォーカスが移動します。
フォーカスが移動した時点で、[F2]を押下すると、なぜエラーになっているかの原因が表示されます。
デバッグ実行をする
アプリケーションを実行しても、意図したとおりの動きをしないとか、実行時エラーが発生して原因が分からないときなどは、デバッグ実行をします。デバッグ実行とは、プログラムをブレークポイントごとに確認しながら実行する方法です。音楽を一時停止しながら再生するような感じで、プログラムを実行させるもので、一時停止する位置のことをブレークポイントと呼びます。
たとえば、以下の簡単なfor文を使ったプログラムをデバッグ実行してみます。
public static void main(String[] args) { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { System.out.println("(i,j)=(" + i + "," + j +")"); } } }
まず、ブレークポイントを標準出力している行に設定します。ブレークポイントを設定するには、該当の行で[Ctrl]+[Shift]+[B]を押下します。すると、次の図のように先頭に青いボタンアイコンが表示され、ブレークポイントが設定されます。なお、ブレークポイントは複数指定できます。
次に、[F11]を押下して、プログラムをデバッグ実行させます。その際、パースペクティブの切り替えダイアログが表示されますので、[はい]をクリックします。すると、次のようなデバッグ用のパースペクティブに切り替わります。
見慣れないウインドウかもしれませんが、ソースコードのほかにも、実行中のスレッドや、プログラム内で使われている変数の状態が表示されています。
ここで、[F8]を押下すると、停止していたプログラムが再開されます。この例では、forループ内でカウンタを表示していますので、変数iおよび変数jの値がインクリメントされているのが分かります。[F8]を繰り返し押下すると、ブレークポイントごとに処理が中断され、変数の値が変わっていくのがわかります。また、変数の値を実行中に任意の値に変更することもできます。このようにして、実行中のプログラムでの変数の値やスレッドの動作など、細かくチェックしながらエラーを修正できます。
デバッグでは、次のショートカットがよく使われています。あわせて覚えておくと便利です。
名前 | ショートカットキー | 説明 |
---|---|---|
実行 | [Ctrl]+[F11] | デバッグ実行する |
再開 | [F8] | 次のブレークポイントまで実行 |
ステップイン | [F5] | 次の行を実行。メソッド呼出しがあればそのメソッド内部も呼び出される |
ステップオーバー | [F6] | 次の行を実行。メソッド呼出しがあっても、そのメソッド内部は呼び出されない。 |
終了 | [Crtl]+[F2] | デバッグを終了 |
おわりに
新人プログラマの皆さんに、定番のIDEであるEclipseでのショートカットによるちょっとした小技や簡単なデバッグのしかたをご紹介しました。プログラミングが大変な重労働だと感じてしまう原因の1つは「単純な作業を繰り返し行う」からではないでしょうか。同じ作業を繰り返し行う作業は、人間よりも圧倒的にコンピュータのほうが得意です。ルーチンタスクやボイラープレートコードはなるべく、便利な道具にまかせてしまって、効率の良いアルゴルズムを考える、とか再利用性の高い設計にする、など人間にしかできないことにより多くの時間を書いたほうが、プログラマにとってはハッピーです。
「弘法筆を選ばず」という声が聞こえてきそうですが、残念ながら筆者は弘法ではないので、道具にはこだわっていきたいと思っています。