【Eclipse 入門】エラーが解決できないときに役立つ!デバッグの使い方
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
作成したプログラムを実行してみると、
エラーとなって動かなかった!イメージしていた結果が返ってこなかった…
なんてことがよく起こります。
そういったときはプログラムのどこかに誤字や、
コードに欠陥があるといった小さなミス「バグ」が発生していることが多いです。
バグが発生したら膨大なコードの中からその原因を探らなくてはなりません。
そこで効率良く原因を探る機能として「デバッグ」が用意されています。
エラーがでたら「詰んだ…」と諦めず、デバッグを使って修正箇所を発見しましょう。
この記事を読むことで基本的なバグの探り方について理解を深めることが出来るでしょう。
関連記事リンク:Eclipse 基本的な用語・機能まとめ / パッケージの役割を理解する / クラスの基本まとめ / 変数の基礎を知る
Eclipse入門 デバッグ機能の使い方
プログラミングを学び始めるとプログラマーが必ず出会うことになる「エラー」。
Eclipse を使い初めたばかりだと、赤くて難解な文字群のエラーにビックリするかもしれません。
プログラミングを続けていく上での壁となるエラーですが、
落ち着いてエラー文を見返してみると案外何を言っているのか理解できて解決できたりもします。
しかしエラー文を読んでも解決できないバグが発生するときもあります。
こういったときはコードの動作が意図した形で動いているか、
1つずつチェックしていくことでエラー箇所を特定していきます。
このとき非常に役立つ機能が「デバッグ」というもので、
デバッグの使い方を学べば効率的にエラー箇所の特定が可能となります。
ここではデバッグの基本的な使い方を解説しますので、
プログラミングの壁を1つ乗り越えるきっかけになればと思います。
デバッグとは?
プログラミングのミスなどによって発生したバグを効率よく発見するための機能がデバッグです。
(デバッグを行うプログラム自体のことをデバッガーと呼びます。)
プログラムが動くプロセスを順番に見ていくこともできるためバグの有無に関わらず、
意図した通りにプログラムが動いているかチェックするために使うこともできます。
そのようなことから簡単なプログラムであっても、
1つのプログラムが作れるようになったら身に着けておくべき知識と言えるでしょう。
デバッグ画面の見方
デバッグ機能を使う際、デバッグ用のパースペクティブが開きます。
まずはデバッグ機能の立ち上げ方と各機能の配置から確認しましょう。
パースペクティブが何かわからないという方はこちら。
また以降クラスの作成方法の解説は省略しますので、
わからないという方もこちらをご確認ください。
デバッグの立ち上げ方
デバッグをするには検証用のコードが必要となります。
今回もコードには Java を使ってクラスを作成します。
以下のコードを自身で作ったクラスの中へ書き込みましょう。
※パッケージ名・クラス名・変数名は不問です。
先にパッケージが何なのか知りたいという方はこちら。
クラスって何?という方はこちら。
変数がわからないという方はこちら。
package test;
public class Debug {
public static void main(String[] args) {
int a =10;
System.out.println(a);
}
}
このプログラムに対してデバッグをかけるにはまずチェックしたいコードの行へ印を付けます。
この印のことをブレークポイントと呼び、
ブレークポイントはコードの左端をダブルクリックすることで付与することが出来ます。
誤った場所にブレークポイントを付けた場合は同じ場所をダブルクリックすることで取り除けます。
○の付いている部分がブレークポイントです。
デバッグをかけると順番にプログラムが実行されていき、
このブレークポイントへ到達すると処理が一旦ストップします。
こうすることでブレークポイント以降の動作を順に追ったり、
変数に入っている値を確認することができるようになります。
今回は3か所にブレークポイントを付けました。
ただし空白の行や、クラス・メソッドを定義した行などはデバッグ対象外となります。
例えば上記1か所目は mainメソッドの定義となるためブレークポイントは動作せずに、
2か所目のブレークポイントで処理がストップします。
では実際にデバッグのかけ方から見てみましょう。
デバッグをかけたいクラスを右クリックして「デバッグ」から「Java アプリケーション」を選択してください。
デバッグ用のパースペクティブへ切り替えるための確認画面ウィンドウが出ます。
今後このウィンドウの表示が不要であれば、下部のチェックボックスへチェックを付けて
「切り替え」を選択しましょう。
デバッグ用の初期パースペクティブの構成は以下の通りです。
「デバッグビュー」にはデバッグを行うプロジェクト名やクラス、現在の処理位置などの情報が表示されています。
「エディタ」にも現在の処理位置が色付けして表示されます。また、編集を行うこともできます。
「変数」ビューは処理が行われた変数の値を確認することができます。また、エディタ上の変数へマウスカーソルを合わせることでもその値を確認することもできます。
「コンソール」は通常と同じように最終的な処理結果が表示されます。
デバッグの基本機能一覧
デバッグ画面の確認が出来たので併せてデバッグの具体的な機能も見ておきましょう。
デバッグ画面ではメニューに以下の機能が追加されています。
よく使う基本機能は7つです。
①すべてのブレークポイントをスキップ:この機能を選択して再開をすると全ブレークポイントを無視して処理を行います。
②再開(ショートカットキー f8):次のブレークポイントへ処理を進めます。
③終了(ショートカットキー ctrl + f2):デバッグを終了します。
④ステップ・イン(ショートカットキー f5):ブレークポイントの有無に関わらず次の処理まで進みます。また次の処理にメソッドがある場合はメソッド内の処理へ移ります。
⑤ステップ・オーバー(ショートカットキー f6):ブレークポイントの有無に関わらず次の処理まで進みます。また次の処理にメソッドがあった場合はメソッドの処理を済ませたうえで次の処理まで移ります。
⑥ステップ・リターン(ショートカットキー f7):実行中のメソッド内で return までの処理を済ませたうえで次の処理まで移ります。
⑦フレームにドロップ:実行中のメソッド内の処理を最初から実行し直します。このとき保持している値はそのまま引き継ぎます。
またメニューのデバッグアイコンからデバッグをかけることもできます。
デバッグの実行
基本的なデバッグの用語と機能がわかったので、実際にデバッグをかけてみましょう。
すべてのブレークポイントをスキップ/再開 機能
冒頭で作成したクラスを使って、
「すべてのブレークポイントをスキップ」と「再開」を試してみます。
クラスへブレークポイントを付与した状態でデバッグを開始させます。
2つ目のブレークポイントで処理が一旦停止していると思いますので、
「すべてのブレークポイントをスキップ」を選択して「再開」を選択してください。
次のブレークポイントへ止まらずに処理が完了します。
「すべてのブレークポイントをスキップ」をもう一選択して解除しておきます。
ステップ・イン/ステップ・オーバー/ステップ・リターン/フレームにドロップ 機能
冒頭で作成したクラスに以下のメソッドを追加で記述して、
「ステップ・イン」と「ステップ・オーバー」を試してみます。
calcメソッドを書き足して、以下のようなクラスにしてください。
package test;
public class Debug {
// mainメソッド
public static void main(String[] args) {
int a = 10;
a = calc(a);
System.out.println(a);
}
// calcメソッド
static int calc(int b) {
for(int i = 0; i < 10; i++) {
b = b + 1;
}
return b;
}
}
calcメソッドは、受け取った値に対して10回分の1を足します(結果的には10を足すという意味)。
mainメソッドの「a = calc(a);」部分だけにブレークポイントを付与してデバッグを開始してください。
ではこの状態を起点に、
ステップ実行(ステップ・イン、ステップ・オーバー、ステップ・リターン)とフレームにドロップの
動きをそれぞれ見ていきましょう。
ステップ・イン
ステップ・インを選択すると calcメソッドの「for(int i = 0; i < 10; i++)」処理へ移動します。
※ a は一時的に b という名前に変わります。
続けてステップ・インを選択すると「b = b + 1」の処理へ移り、
もう一度ステップ・インを選択すると 10 に +1 の処理を行います。
右側の「変数」を見ると +1 の加算が行われたことが確認できます。
継続的にステップ・インを選択していくと変数の値が1ずつ増えていくことが確認できるはずです。
値が 20 まで増えたら「return b;」へ移動し、もう一度ステップ・インすると「a = cals(a);」へ戻ります。
このようにメソッド内の処理を確認できる機能がステップ・インでした。
ステップ・インの動作が確認できたので「再開」を選択して処理を完了させましょう。
※もし以下のようなタブが開いた場合は、複雑なメソッドの処理へ移動しています。
タブを閉じても問題はありません。
ステップ・オーバー
デバッグがブレークポイントで一時停止した状態から、「ステップ・オーバー」を選択します。
このときステップ・インでは calcメソッドの処理へ移動しましたが、
今回は calcメソッドの処理が完了した状態で、次の処理へ移動しています。
メソッドの結果だけを知りたい場合はステップ・オーバーを使うことで確認できます。
「再開」を選択して処理を完了させましょう。
ステップ・リターン
デバッグがブレークポイントで一時停止した状態から、
まずはステップ・インで calcメソッドの処理へ入ります。
次に「ステップ・リターン」を選択すると、
「return b;」までの処理を完了させて「a = calc(a);」へ戻ります。
今回の場合はステップ・オーバーに似た動きを見せていますが、
メソッド内の一部の処理だけを確認したい場合などに使うことができる機能です。
フレームにドロップ
デバッグがブレークポイントで一時停止した状態から、
まずはステップ・インで calcメソッドの処理へ入ります。
「return b;」までステップ・インで処理を続けてましょう。
ここで「フレームにドロップ」を選択すると、再び calcメソッドの処理を開始します。
フレームにドロップは主にステップ・インで進め過ぎた処理があった場合などで利用できる機能です。
※もしメソッドの処理が完了した場合は「フレームにドロップ」は使えません。
また前述した通り処理を再び開始すると、現在の値が引き継がれるので注意が必要です。
上記例の場合でいうと「10」に「10」が追加された後、
フレームにドロップを行っているため更に「1が10回」加算されて結果的に「30」が表示されます。
終了 機能
終了機能は言葉の通りデバッグを終了させます。
最後まで動作を行うものではないため、コンソールへ結果の表示もされません。
バグの確認が終わり、以降の処理の確認が必要なくなった場合などに使うことが出来ます。
デバッグを終了して Java のパースペクティブへ戻りたいときは、
メニュー右側から Java のパースペクティブを選ぶことで戻ることが出来ます。
これらデバッグの基礎を身に着けることで、
意図した動作をしているか?
結果が意図しないものの場合はどこに原因があるか?
エラーが出ている箇所はどこか?
といったことを自身で探ることができるようになります。
いつでも使えるように身に着けておきましょう。
【著者】
30代で異業種となるIT業界へ転職した駆け出しのプログラマです。これまで主に Java や Ruby、HTML/CSS を使って学習を目的としたショップサイトや掲示板サイトの作成を行いました。プログラマとしての経験が浅いからこそ、未経験者の目線に近い形で基礎の紹介をしていきたいと思います。
正社員/フリーランスの方でこのようなお悩みありませんか?
- 自分に合う案件を定期的に紹介してもらいたい
- 週2、リモートワークなど自由な働き方をしてみたい
- 面倒な案件探し・契約周りは任せて仕事に集中したい
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート