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

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

今回は「Eclipseでのデバッグ方法~プロジェクトの削除と復活」についてご紹介します。

関連ワード (Java、アプリケーション開発等) についても詳細と、関連コンテンツとをまとめていますので、参考にしながらぜひ本記事について議論していってくださいね。

本記事は、CodeZine様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


コンソールでの例外表示

 前回紹介したように、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:ツールバー上のデバッグに関するボタン群

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

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

デバッグ実行の活用

 ブレークポイントとデバッグ実行の基礎を理解してもらえたところで、応用させていきましょう。

ブレークポイントは複数設置できる

 ブレークポイントは、いくつも設置することが可能です。例えば、図10は、7行目(リスト1では(3))だけでなく、9行目(リスト1では(5))にもブレークポイントを設置した画面です。

図17:ブレークポイントを2カ所に設置した画面
図10:ブレークポイントを2カ所に設置した画面

 この状態でデバッグ実行をすると、図6と同様に1カ所目のブレークポイント(7行目)で処理が一時停止されます。その状態で、ボタン(再開ボタン)をクリックすると、次のブレークポイントまで実行され、そこで一時停止します(図11)。

図18:2カ所目のブレークポイントで処理が一時停止した画面
図11:2カ所目のブレークポイントで処理が一時停止した画面

 図8の変数ビューとは違い、7行目(リスト1では(3))や8行目(リスト1では(4))で用意した変数addや変数ansが増えているのが確認できます。このように複数のブレークポイントを設置し、それぞれで処理を一時停止→再開を繰り返し、変数の値を確認することで、より効率よくデバッグが行えます。

ブレークポイントの除去

 設置したブレークポイントを除去する場合は、ブレークポイントを表すアイコンをダブルクリックするだけです。ただし、さまざまなファイルのありとあらゆる箇所にブレークポイントを設置した場合、どこに設置したかわからなくなることも多々あります。

 場合によっては、ブレークポイントを除去し忘れて、デバッグ実行時に思わぬところで処理が一時停止されてしまうこともあります。そのような場合に便利なのが、ブレークポイントビューです。デバッグパースペクティブでは、デフォルトで変数ビューの横にタブが配置されています(図12)。

図19:ブレークポイントビュー
図12:ブレークポイントビュー

 このビューでは、現在のワークスペース中に存在するブレークポイントが一覧表示されます。リストからブレークポイントを選択し、ボタン(選択ブレークポイントの除去ボタン)をクリックすると、そのブレークポイントが除去されます。さらに、ボタン(全ブレークポイントの除去ボタン)をクリックすると、全てのブレークポイントが除去されます。

処理を1行ずつ実行するステップオーバー

 処理の一時停止→再開の究極形は、1行ずつ処理を行うことです。場合によっては、そのようなデバッグ実行をしたい場合もあります。となると、各行にブレークポイントを設置しなければならないように思いますが、Eclipseには1行ずつ処理を行う機能があります。それが、ステップ実行です。

 例えば、図13は6行目(リスト1では(2))にブレークポイントを設置し、そこで処理が一時停止されている状態です。

図22:6行目で処理が一時停止している画面
図13:6行目で処理が一時停止している画面

 この状態で、ツールバー上のボタン(ステップオーバーボタン)をクリックすると、6行目(リスト1では(2))の処理が実行され、7行目(リスト1では(3))で処理が一時停止します(図14)。

図23:1行だけ処理が実行され7行目で処理が一時停止している画面
図14:1行だけ処理が実行され7行目で処理が一時停止している画面

 変数タブでは、図13にはなかった変数num2の値が表示されています。このように、コード1行ずつ処理を行いながら、変数の値を確認できるのがステップオーバーです。

メソッド内部の処理をステップ実行できるステップイン

 このステップオーバーを繰り返していき、8行目(リスト1では(4))で一時停止している状態でステップオーバーボタンをクリックすると、8行目の処理が実行されて、9行目で一時停止となります。これは、正常な動作です。

 一方、8行目ではAdditionクラスのplus()メソッドを呼び出しています。つまり、この行での実際の処理は、plus()メソッド内に処理が移管されているということであり、そこでさらに複数行の処理が行われていることになります。この呼び出し先メソッドでもステップ実行をしたい場合に利用するのが、ボタンのステップインです。実際に行ってみましょう。図15は、8行目(リスト1では(4))で一時停止している状態です。

図24:8行目で処理が一時停止している画面
図15:8行目で処理が一時停止している画面

 ここで、ボタン(ステップインボタン)をクリックします。すると、画面が図16のように変わり、Additionクラスのplus()メソッド内をステップ実行している画面になります。

図25:Additionクラスのplus()メソッドをステップ実行している画面
図16:Additionクラスのplus()メソッドをステップ実行している画面

 もちろん、この画面でステップオーバーを行うことで、メソッド内の処理を1行ずつ行うことが可能です。試しに、図16の状態でボタン(ステップオーバーボタン)をクリックすると、図17の画面になります。

図26:plus()メソッド内最終行で一時停止している画面
図17:plus()メソッド内最終行で一時停止している画面

 これは、plus()メソッド内の最終行で一時停止している状態です。ここでさらにステップオーバーを実行すると、図15の画面に戻ります。これで、処理が元のmain()メソッドに戻ったことがわかります。

 このようにして、ブレークポイントとステップ実行を活用することで、非常に効率よくデバッグできるようになります。

プロジェクトの削除とインポート

 さて、話をガラッと変えて、プロジェクトの削除を扱っておきましょう。

プロジェクトの削除は削除メニュー

 パッケージエクスプローラー上にあるプロジェクトを削除する場合は、プロジェクトフォルダを右クリックして表示されたメニューから[削除]を選択するだけです(図18)。

図27:プロジェクトの削除は削除メニュー
図18:プロジェクトの削除は削除メニュー

 これは、[編集]メニューから[削除]を選択しても同じです。すると、図19の確認ダイアログが表示されます。

図28:プロジェクトの削除確認ダイアログ
図19:プロジェクトの削除確認ダイアログ

 この確認ダイアログで[OK]をクリックすると、プロジェクトが削除されます。

プロジェクトの削除は認識しなくなるだけ

 ところで、図19のダイアログ中のチェックボックスが意味するところを説明するとともに、プロジェクトの削除の本当の姿を紹介します。

 図20は、前項の手順でFirstJavaProjectプロジェクトが削除されたパッケージエクスプローラーと、ファイルシステム上でワークスペースフォルダ内を参照したウィンドウを一緒に並べた画像です。

図29:ファイルシステム上ではプロジェクトは健在
図20:ファイルシステム上ではプロジェクトは健在

 この画像からわかるように、Eclipse上からプロジェクトを削除しても、その実体は削除されていません。あくまでEclipseが認識しなくなるだけです。

 プロジェクトを、その実体から、つまり、ファイルシステム上でも削除する場合、図19の削除確認ダイアログ中の[ディスク上からプロジェクトコンテンツを削除]のチェックボックスにチェックを入れて[OK]をクリックします。

 その際、チェックボックス横の注意書きにもあるように、ファイルシステム上からも削除されるので、元には戻りません。間違って作成したプロジェクトを、直後に削除する場合でもない限り、安全のためには、このチェックボックスにはチェックを入れず削除を行い、Eclipseがプロジェクトを認識しなくなってから、ファイルシステム上から手動で削除するという2ステップを踏んだほうがよいでしょう。

 なお、Eclipse上から削除せずにいきなりファイルシステムからプロジェクトフォルダを削除した場合、パッケージエクスプローラー上では、プロジェクトは図21のような見え方となります。

図30:ファイルシステム上で削除されたプロジェクト
図21:ファイルシステム上で削除されたプロジェクト

 このようなアイコンの場合は、該当プロジェクトがファイルシステムから削除や移動されていないかを確認してください。もし、不要なプロジェクトの場合は、この状態でEclipseから削除すれば問題ありません。

プロジェクトのインポート

 Eclipseのプロジェクトは、ファイルシステム上から削除されていない限り、いつでもEclipseに読み込んで復活させることができます。[ファイル]メニューから[インポート]を選択します。すると、図22のインポートウィザードが表示されます。

図31:インポートウィザード画面
図22:インポートウィザード画面

 この画面ではさまざまなインポートが可能です。ここでは[一般]フォルダを展開して表示された[既存のプロジェクトをワークスペースへ]を選択し、[次へ]をクリックします。すると、図23の画面が表示されます。

図32:既存プロジェクトのインポート画面
図23:既存プロジェクトのインポート画面

 [ルートディレクトリの選択]欄にインポートしたいプロジェクトフォルダを選択すると、プロジェクト欄にインポートしたいプロジェクト名が表示されます。そのプロジェクトが選択されている(チェックされている)ことを確認して[完了]をクリックすると、インポートが完了し、プロジェクトエクスプローラー上にインポートしたプロジェクトが表示されるようになります。

 もし、インポートしたいプロジェクトがzipファイルの場合は、[アーカイブファイルの選択]欄でzipファイルを選択します。ここで、図23のオプションの[ネストされたプロジェクトの検索]チェックボックスと[プロジェクトをワークスペースにコピー]チェックボックスについて補足しておきましょう。

ネストされたプロジェクトの検索

 [ルートディレクトリの選択]において、上記の通りプロジェクトフォルダを選択するのではなく、ワークスペースのように複数のプロジェクトフォルダが格納された、より上位のフォルダを選択した場合、このチェックを入れることでフォルダ内の複数のプロジェクトをまとめてインポートできます。

プロジェクトをワークスペースにコピー

 インポートするプロジェクトフォルダがワークスペース外に存在する場合、そのフォルダの内容物をまとめワークスペースにコピーし、それをプロジェクトとするかどうかのチェックボックスです。チェックを外した場合、インポートするプロジェクトはリンク形式として、ワークスペース外のフォルダを参照することになります。

 もちろん、Eclipse上でプロジェクト内のファイル類を変更した場合、その実体となるワークスペース外に存在するファイル類が変更されてしまいます。チェックを入れた場合は、コピーしてきたワークスペース内のファイル類が変更され、インポート元のファイル類はそのままの状態で保持されます。

 なお、そもそもワークスペース内に存在するプロジェクトをインポートするのならば、このチェックボックスは意味がありません。

Eclipseの挙動がおかしくなったら

 最後に、Eclipseを利用していて挙動がおかしくなった場合の対処法を紹介しておきましょう。一般的にアプリケーションの挙動がおかしくなった場合、そのアプリケーションの再インストールを考えます。もちろん、Eclipseも例外ではありませんが、その前に一度試したほうがよいことがあります。それは、.metadataフォルダの削除です。

 Eclipseのワークスペースフォルダ内には.metadataフォルダが存在しています。これは、ドットから始まる隠しフォルダなので、OSの設定で隠しファイルを非表示にしている場合は見えません。その場合は、設定を変更するか、コマンド操作で確認することになります(図24)。

図33:ワークスペースフォルダをコマンドで確認
図24:ワークスペースフォルダをコマンドで確認

 この.metadataフォルダには、そのワークスペースに関する設定情報が格納されています。これらの設定情報が壊れたために、Eclipseの挙動がおかしくなることが多々あります。その場合は、.metadataフォルダを丸々削除の上、もう一度Eclipseを起動してください。多くの場合、正常な動作に戻ります。

 ただし、設定情報が初期化されているだけでなく、パッケージエクスプローラー上からはプロジェクトも消えています。といってもこれは先述の通り、あくまでEclipseがプロジェクトを認識しなくなっただけで、ワークスペース内に実体が残っている限りは先の手法でいつでもインポートが行えて復活できます。

まとめ

 今回は、Eclipseでの例外の確認方法から話を始めて、ブレークポイントを利用したデバッグ方法、ステップ実行を紹介しました。また、プロジェクトの削除とインポートについても紹介しました。次回は、Eclipseの便利なショートカットを紹介していきます。

COMMENTS


3208:
2021-02-09 23:28

Amazonランキング:14位 さらさ 無添加 植物由来の成分入り 洗濯洗剤 液体 詰め替え 約2倍(1640g)(20:30)

3209:
2021-02-09 18:17

会社潰れた解雇されたというなら、ハローワークで職業訓練を相談して。JavaやPHPなどのプログラミングやWebデザインのコースもあるから。 変なプログラミング塾よりハイパーすごいから。

3210:
2021-02-09 01:11

地球連邦軍「一年もあれば、緑の大地に戻るのも余裕だし、連合艦隊を再建し、アンドロメダ級戦艦を作る程度のことは可能だッ!」 人類には必要なのは過去の郷愁ではなく 未来への覇道なのよ、哲郎…

Recommended

TITLE
CATEGORY
DATE
米運輸省が政府GPSを置き換えられるか11社を評価、全ユースケースに対応できたのは1社だけ
セキュリティ
2021-01-18 17:31
ヘルスケア企業の意思決定結果を予測するLumiataが14.5億円調達
ヘルステック
2021-01-17 02:51
ソニー「α1」速攻インプレッション プロカメラマンから見てうれしい5つのポイント (1/2 ページ)
イラスト・デザイン
2021-01-29 16:12
KDDI、MNP転出手数料3000円を廃止へ
IT関連
2021-01-13 01:29
生産性を重視したTeamflowの仮想HQプラットフォームが390万ドルを獲得
IT関連
2021-02-02 19:36
スマホでQRコードを読み取り注文できる「完全非接触自販機」が登場、キャッシュレス決済も対応
IoT
2021-02-26 22:16
密避けて 避難所の混雑状況をリアルタイムに可視化
IT関連
2021-03-02 00:44
Vue.js入門 基礎から実践アプリケーション開発まで
amazon
2021-03-02 00:44
刻々と変わるビジネス環境、クラウド移行は待ったなし 誰に相談すればいい?
フレッシュサマリ
2021-03-03 23:47
Postmatesの元グローバル公共ポリシー担当副社長が語るギグワーカーの将来
シェアリングエコノミー
2021-02-18 12:35
どこが勝ち抜く? 携帯3社の“2980円競争” 各社の新料金プランを比較 (1/2 ページ)
くわしく
2021-01-29 20:01
Facebookが「個人データ管理ツール」を改訂、8つに細分化されデータ利用の説明も追加
ネットサービス
2021-01-14 16:31
テスラが同社オートパイロットのライセンス供与に意欲、他メーカーと予備交渉をすでに開始
モビリティ
2021-01-29 23:52
日経平均3万円超え、米長期金利1.3%–金利上昇で株高終わる?
IT関連
2021-02-22 16:04
AIで泳ぎの映像を自動編集、スイミング上達に活用 ルネサンスが水泳教室で新サービス
ロボット・AI
2021-02-09 07:15
知識ゼロからのプログラミング学習術 独学で身につけるための9つの学習ステップ
amazon
2021-02-09 07:15