CodeZine(コードジン)

特集ページ一覧

Eclipseでのデバッグ方法~プロジェクトの削除と復活

20年経ってもデファクトスタンダードIDEのEclipse入門 第3回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2021/02/09 11:00

 本連載では、IDEの1つであるEclipseを紹介していきます。Eclipseが世に出てから20年以上は経過していますが、いまだにデファクトスタンダードという不動の地位にいます。歴史もあり、さまざまな開発者に利用されているわりには、Eclipseの入門にあたるようなまとまった情報源は意外と少ないといえます。本連載がその一助となれば幸いです。前回は、Eclipseでのコーディング方法および入力したプログラムの実行方法を紹介しました。今回は、入力したプログラムを効率よくデバッグする方法を紹介します。また、作成したプロジェクトを削除したり、復活したりする方法も紹介します。

目次

コンソールでの例外表示

 前回紹介したように、Eclipseではコーディングだけでなく、実行まで行うことができます。ただし、その実行結果が期待通りとならないのが、プログラミングの常です。その際、どこがおかしいのかを突き止め、修正しなければなりません。

 Javaの場合は、何か問題があった場合、多くは例外発生という形をとります。Eclipseでは、そのような例外はコンソールに表示されます。例えば、図1は要素数が4個の配列のインデックス4(5個目)にデータを代入するコードが記述されたJavaプログラムを実行したEclipseの画面です。

図1:不正な配列アクセスで例外が発生したEclipseの画面
図1:不正な配列アクセスで例外が発生したEclipseの画面

 コンソールタブに、発生した例外が表示されています。発生した例外は以下の内容です。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
  at com.example.eclipse.firstjavaproject.ArrayWithException.main(ArrayWithException.java:10)

 これら例外メッセージを元に、問題点を解決していくことができます。また、例外メッセージ中には、各Javaクラスでの例外が発生した箇所が記載されています。上記メッセージでは、2行目末尾の「ArrayWithException.java:10」が該当します。これがコンソールタブ上ではリンクになっており、クリックすることでソースコードの該当箇所をすぐに表示してくれます。この機能は、複数のクラスを利用したJavaコーディングでのデバッグでは便利な機能です。

ブレークポイントとデバッグ実行

 前節で述べたように、例外が発生した場合、まずは例外の発生箇所およびその周辺のソースコードを確認し、原因を突き止めていきます。しかし、場合によってはなかなか原因がわからないこともあります。さらに、例外が発生せずに、実行結果が想定と違う場合もあります。その場合、Eclipseには便利な機能として、ブレークポイントとデバッグ実行というのがあります。それを次に紹介しておきましょう。

ブレークポイントとは

 ブレークポイントとは、プログラムの実行中に、処理を一時停止する箇所のことです。

 例えば、リスト1のJavaプログラムがあるとします。

[リスト1]com.example.eclipse.firstjavaproject.CalcWithRand
package com.example.eclipse.firstjavaproject;

public class CalcWithRand {
	public static void main(String[] args) {
		int num1 = (int) (Math.random() * 10);  // (1)
		int num2 = (int) (Math.random() * 10);  // (2)
		Addition add = new Addition();  // (3)
		int ans = add.plus(num1, num2);  // (4)
		System.out.println("答えは" + ans);  // (5)
	}
}

 簡単にプログラムの内容を説明すると、(1)と(2)で乱数を発生させ、変数num1とnum2とします。(3)と(4)で別のJavaクラスであるAdditionクラスにある足し算処理メソッドplus()を利用して、発生させた乱数の足し算処理を行います。その結果を(5)で表示させるというものです。このプログラムを実行し、その結果、例えば、答えが10と表示されたとします。

 となると一体、num1とnum2はどういう値なのか、簡単にはわかりません。そこで、ブレークポイントに登場してもらいます。リスト1のソースコードが表示されている、Eclipseのエディタ領域の、行番号の左横の領域をダブルクリックします。図2では、リスト1の(3)の行(図2では7行目)をダブルクリックしています。

図2:ブレークポイントが設置された画面
図2:ブレークポイントが設置された画面

 ダブルクリックした箇所に見えるの青いマークがブレークポイントです。ブレークポイントが付与されたソースコードは、実行時にその行を実行する手前で処理が一時停止します。ただし、通常の実行方法では一時停止にはなりません。

デバッグ実行

 ブレークポイントで処理を一時停止させるためには、デバッグ実行をする必要があります。これは、パッケージエクスプローラー上の.javaファイルを右クリック、あるいはエディタ領域に表示されているソースコードを右クリックして表示されるメニューから、[実行]ではなく[デバッグ]を選択します(図3)。

図4:デバッグ実行メニュー
図3:デバッグ実行メニュー

 ツールバーからデバッグ実行をする場合は、実行ボタン左横のデバッグ実行ボタンを利用します。単にデバッグ実行ボタンをクリックすると、直近に実行したアプリケーションをデバッグ実行します。もし、履歴リストから選択したい場合は、前回紹介した実行ボタン同様に、右横の▼をクリックすると、図4のメニューが表示されるので、そこから選択します。

図7:デバッグ実行ボタンの▼クリックで表示されたメニュー
図4:デバッグ実行ボタンの▼クリックで表示されたメニュー

デバッグパースペクティブと変数ビュー

 実際にデバッグ実行をしてみましょう。すると、図5のダイアログが表示されます。

図8:デバッグパースペクティブへの切り替え確認ダイアログ
図5:デバッグパースペクティブへの切り替え確認ダイアログ

 これは、デバッグパースペクティブへの切り替えを確認するダイアログです。図3の画面は、第1回に紹介したように、Javaコーディングに最適化されたJavaパースペクティブです。Eclipseでは、デバッグ実行に最適化されたデバッグパースペクティブというのも用意されており、デバッグ実行をすると、自動的にそのパースペクティブへの切り替えを確認するダイアログが表示されます。そのダイアログ上の[切り替え]ボタンをクリックすると、図6のデバッグパースペクティブが表示されます。

図9:表示されたデバッグパースペクティブ
図6:表示されたデバッグパースペクティブ

 さらに、パースペクティブが切り替わるだけではなく、アプリケーションが実行され、処理がブレークポイントで一時停止された状態になっています。図6のエディタ領域の7行目が図7の通り緑色になっているのが確認できます。

図10:処理が一時停止された部分を表す緑色の行
図7:処理が一時停止された部分を表す緑色の行

 この一時停止された状態で、右上の変数ビューを確認します(図8)。

図11:変数の値が確認できる変数ビュー
図8:変数の値が確認できる変数ビュー

 変数num1とnum2の値がそれぞれ4と6であることが確認できます。また、8行目(リスト1では(4))の変数ansが変数ビューにはないことも確認できます。これは、この段階では、処理が6行目の終了段階、つまり、7行目の実行手前で一時停止されており、8行目まで到達していないことを物語っています。

変数の値の確認がデバッグの入り口

 このような変数の確認は、もちろんSystem.out.println()を使って、標準出力にnum1とnum2を表示させればわかります。しかし、num1とnum2の値の確認のためだけに記述したSystem.out.println()の行を、値の確認後に削除しなければなりません。その削除し忘れがあれば、それはそれでアプリケーションとしては問題です。

 一方、デバッグは変数の値の確認が基本となっています。変数の値を確認することで、問題解決の道が開けることが多々あります。そのような変数の値を確認するにあたって、元のソースコードに手を加えることなく行えるブレークポイントとデバッグ実行は最適な方法といえます。

続きの処理を行う再開ボタン

 デバッグ実行で処理が一時停止した状態では、ツールバー左側に図9のボタン群が表示されています。

図12:ツールバー上のデバッグに関するボタン群
図9:ツールバー上のデバッグに関するボタン群

 このうち、ボタン(再開ボタン)が処理を再開させるボタンです。このボタンをクリックすることで、一時停止された処理の続きが実行されます。一方、ボタンは停止ボタンであり、その名の通り、現在実行中のアプリケーションを強制終了します。

 なお、ボタン(ステップインボタン)、およびボタン(ステップオーバーボタン)については後述します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

バックナンバー

連載:20年経ってもデファクトスタンダードIDEのEclipse入門
All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5