添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

コンソールでの例外表示

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

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

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

もっと読む

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

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での 登録メンバ は55名で、現在も執筆メンバを 募集中 。興味のある方は、どしどし応募頂きたい。 著書 記事 多数。 RSS Twitter: @yyamada (公式)、 @yyamada/wings (メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。 Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「 WINGSプロジェクト 」代表。 主な著書に「 入門シリーズ(サーバサイドAjax/XMLDB/PEAR/Smarty) 」「 独習シリーズ(ASP.NET/PHP) 」「 10日でおぼえる入門教室シリーズ(ASP.NET/PHP/Jakarta/JSP&サーブレット/XML) 」「 Pocket詳解辞典シリーズ(ASP.NET/PHP/Perl&CGI) 」「 今日からつかえるシリーズ(PHP/JSP&サーブレット/XML/ASP) 」「 書き込み式 SQLのドリル 」他、 著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です