12 Javaプロジェクトの実行とデバッグ
JDeveloperでは、コード内の問題のある領域を特定できる複数のデバッグ・ウィンドウ(たとえば、ブレークポイント、ヒープ、スタックなど)が用意されています。さらに、様々なJDeveloperのデバッガおよびランナー・アイコンがJDeveloperユーザー・インタフェースの様々な領域で使用可能であり、これらについて説明します。
この章の内容は次のとおりです。
Javaプログラムの実行およびデバッグについて
JDeveloperは、実行、デバッグ、プロファイリングされるJavaプロセスを追跡し、ローカル・デバッグとリモート・デバッグをサポートしています。ローカル・デバッグでは、ソース・ファイルにブレークポイントを設定してデバッガを起動する前にセッションを開始します。また、リモート・デバッグでは、デバッガ・プロセスがアタッチされるデバッグ対象プロセスを起動します。
JDeveloperには、Javaプログラムの実行方法を監視および制御するいくつかの方法があります。Javaプログラムを実行するとき、JDeveloperは実行、デバッグおよびプロファイリングされるプロセスを常時追跡します。また、JDeveloperでは、Java、JSPおよびサーブレット・ソース・ファイルのリモート・デバッグとローカル・デバッグを提供しています。
JDeveloperでは、ローカルおよびリモートの2種類のデバッグをサポートしています。ローカルのデバッグ・セッションは、ソース・ファイルにブレークポイントを設定してからデバッガを起動することで、開始されます。JDeveloperでサーブレットなどのアプリケーションをデバッグする際は、実行フローを完全に制御して、変数の値を表示および変更できます。また、クラス・インスタンスのカウント数とメモリー使用量を監視することによって、アプリケーションのパフォーマンスを調べることができます。JDeveloperは、アプリケーションから他のソース・ファイルへのコールに従うか、またはソース・ファイルが使用できない場合はスタブ・クラスを生成します。
リモート・デバッグでは、2つのJDeveloperプロセスが必要です。1つはデバッガ・プロセス、もう1つはデバッグ対象プロセスです。デバッグ対象プロセスは異なるプラットフォームに存在している場合があります。デバッグ対象プロセスが開始し、デバッガ・プロセスがそのデバッグ対象プロセスにアタッチされた後は、リモート・デバッグとローカル・デバッグの動作は似ています。
プロセス・ウィンドウの理解
実行、デバッグ、プロファイリングが行われるプロセスを追跡するための「プロセス」ウィンドウが開きます。「ウィンドウ」の「プロセス」を使用して「プロセス」ウィンドウを開きます。プロセスが完了すると、このウィンドウからプロセスが自動的に削除されます。
「プロセス」ウィンドウは、実行、デバッグ、プロファイリングが行われるプロセスを追跡します。このような複数のプロセスが同時にアクティブになっている場合、「プロセス」ウィンドウが自動的に表示されます。プロセスが完了すると、そのプロセスは「プロセス」ウィンドウから自動的に削除されます。
-
「プロセス」ウィンドウを開くには、メイン・メニューから「ウィンドウ」→「プロセス」を選択します。
-
「プロセス」ウィンドウでプロセスを終了するには、「プロセス」ウィンドウ内を右クリックして、ポップアップ・メニューから「終了」をクリックします。
-
「実行ログ」を表示するには、「プロセス」ウィンドウでプロセスを右クリックして、ポップアップ・メニューから「ログの表示」を選択します。
実行用のプロジェクトの構成
実行構成は、プログラムの実行を制御する設定をグループ化します。プロジェクトは、カスタム構成やプロジェクトにバインドされる構成など様々な実行構成を使用できます。
ターゲット、起動オプション、およびデバッガ、ロガー、プロファイラの動作など、プログラムの実行方法を制御する設定が実行構成にまとめられます。
1つのプロジェクトに、それぞれプロジェクトの特定のファセットまたは開発プロセスのフェーズに対応して設定されている複数の実行構成が存在する場合があります。実行構成は、プロジェクトにバインドされ、プロジェクトで作業する全員が使用できる場合もあれば、自分専用のカスタム構成の場合もあります。
ノート:
JDeveloperから実行されるJavaプログラム(たとえば、Oracle ADFモデル・テスターなど)は、JDeveloper IDEのJavaオプションを継承していません。したがって、通常は、実行構成で使用する実行/デバッグのJavaオプションを設定する必要があります。
実行構成の選択方法
新規プロジェクトごとにデフォルトの実行構成が作成されますが、カスタム実行構成を作成できます。実行構成を選択する手順を使用してください。
新規プロジェクトごとにデフォルトの実行構成が作成されます。実行構成、または作成したその他の構成を選択して、選択したプロジェクトを実行することができます。
実行構成を選択するには:
実行構成の作成方法
実行構成を作成する手順を使用してください。既存の構成をコピーして新規の実行構成を作成し、その設定を変更します。
新しい実行構成を作成するには、既存のもの(たとえば、Default)をコピーします。コピー後に、新しい構成に応じて設定を変更します
実行構成を作成するには:
- 「実行構成の選択方法」で説明するように、実行構成を選択します。
- 「新規」をクリックします。
- 「名前」ボックスで、新しい実行構成の名前を入力します。
- 「設定のコピー元」ドロップダウン・ボックスで、コピー元の既存の実行構成を選択します。
- コピー元と同じ設定で新しい実行構成を作成するには、「OK」をクリックします。
- 新しい実行構成を異なる設定で作成するには、新しい設定を選択して、「OK」をクリックします。
プロジェクトまたはファイルの実行方法
プロジェクトまたはファイルをコンパイルして実行します。また、ログ・ウィンドウに警告やエラー・メッセージを表示します。プロジェクトまたはファイルを実行する手順を使用してください。
プロジェクトまたはファイルのコンパイルが終了したら、それを実行できます。プロジェクトまたはファイルのビルドの詳細は、「Javaプロジェクトのビルド」を参照してください。実行中に発生する可能性のある警告またはエラー・メッセージがログ・ウィンドウに表示されます。
プロジェクトまたはファイルを実行するには:
コマンドラインからのプロジェクトの実行方法
プロジェクトがスタンドアロン実行可能プロジェクトである場合や、アプリケーションのmain()メソッドを含むクラス・ファイルを選択する場合は、オペレーティング・システムのコマンドラインからプロジェクトを実行できます。
オペレーティング・システムのコマンドラインからプロジェクトを実行する手順は次のとおりです。
-
プロジェクトはスタンドアロン実行可能プロジェクトである必要があります。
-
アプリケーションの
main()
メソッドを含むクラス・ファイルを選択すること
アプリケーションを起動するには、次のように入力します。
java -cp <jdev_install>\jdeveloper\jdev\mywork\Workspace1\Project1\classes package1.Application1
コマンドラインから実行可能JARファイルを起動するには、次のように入力します。
java -jar <application>.jar
ここで、<application>
は使用しているJARファイルの名前です。
Java Virtual Machineの変更方法
オペレーティング・システムに応じてJava Virtual Machineを変更する必要がある場合があります。クライアント側アプリケーションにはHotSpot Client VMが必要で、長時間実行のサーバー・アプリケーションの実行にはServer VMが必要です。Java Virtual Machineを変更する手順を使用してください。
オペレーティング・システムの要件によって、開発対象のJava Virtual Machine (VM)を変更する必要がある場合があります。たとえば、クライアント側アプリケーションの場合は、HotSpot Client VMを使用し、長時間実行のサーバー・アプリケーションを実行するにはServer VMを使用します。
Java Virtual Machineを変更するには:
マクロ
マクロは、格納可能で、必要なときにいつでも実行できる一連のコマンドおよびアクションであり、繰り返して実行するタスクおよび定期的に実行するタスクを自動化します。
マクロを使用すると、繰り返して実行するタスクまたは定期的に実行するタスクを自動化できます。格納可能で、タスクを実行する必要があるときに実行できる一連のコマンドおよびアクションです。 ただし、この場合、マクロ機能により、マクロの作成時には値が不明な式をプレースホルダを使用して表すことができます。
インストールまたはプラットフォームに応じて変化するパスは、マクロで非常によく使用されます。わかりやすいように、いくつか例を示します。
-
組込みIDEマクロ(修飾子=ide)には、oracle.home、workspace.dirおよびproject.dirなどがあります
-
環境変数(修飾子= env)は、プラットフォーム固有の環境変数へのアクセスを提供します。JAVA_HOME、WAS_HOME、HOSTNAMEなどがあります
-
システム・プロパティ(修飾子= prop)は、java.version、java.io.tmpdir、file.separatorなどのJavaシステム・プロパティへのアクセスを提供します
-
ユーザー定義プロパティでは、事前定義済のマクロ・ハンドラで必要な値が指定されていない場合にユーザーが自由に定義できます。
MacroHandlersは、マクロ名をマクロ値にマップするクラスです。JDEV-runnerモジュールは、新しいマクロの定義、式に使用するマクロの選択、マクロの編集などを行うためのオプションを提供します。
プログラム用クラスパスの設定
コマンドラインから実行されるJavaプログラムには、JVMと、アプリケーションを構成するファイルおよびライブラリへのクラスパスのリストが必要です。Javaプログラムの実行に使用するメソッドによって、クラスパスのフォームが決定します。
コマンドラインからJavaプログラムを実行する場合、アプリケーションを構成するクラス・ファイルおよびライブラリへのパスのリストをJava Virtual Machine (JVM)に提供する必要があります。クラスパスの構成は、Javaプログラムの実行方法によって異なります。
JavaクラスはJavaアーカイブ・ファイル(*.jar
)に格納するか、各パッケージ・ディレクトリの個別のクラス・ファイル(*.class
)として格納します。JavaでのJARファイルとパッケージ・ディレクトリの処理方法は異なります。
-
CLASSPATH
でJARファイルを参照する場合、JARファイルへの完全修飾パスを使用します。CLASSPATH
でパッケージ・ディレクトリを参照する場合、パッケージの親ディレクトリへのパスを使用します。 -
CLASSPATH
文では、JARとパッケージ・ディレクトリの両方を参照できます。同じ文で複数のCLASSPATH
を参照する場合は、各CLASSPATH
をセミコロン(;)で区切ります。
クラスパスの定義後、Javaプログラムの実行方法によってJVMへ値を渡す方法は異なります。
-
java.exe
を使用してスタンドアロン・アプリケーションを実行するようにCLASSPATH
環境変数を設定します。 -
java.exe
の-classpath
オプションを使用するように、CLASSPATH
環境変数を設定します。 -
インターネット・ブラウザでアプレットを実行するために、
.html
ファイルの<APPLET>
タグにCLASSPATH
を埋め込みます。
SDKツールをコールする場合に、-classpath
オプションを使用する方法(推奨)かCLASSPATH
環境変数を設定する方法を選択できます。
CLASSPATH環境変数の設定(java.exeの場合)
Java2 Standard Editionには、java.exe
ファイルが含まれています。このファイルは、CLIからJavaアプリケーションをテストする際に使用できる開発ツールです。
Java2 Standard Edition (J2SE)にはjava.exe
ファイルが含まれています。これは開発ツールとして使用するためのファイルで、Javaプログラムとともに配布するためのライセンスは供与されていません。コマンド・プロンプト画面からJavaアプリケーションをテストする際に使用します。
コマンド・プロンプト画面からJavaアプリケーションを実行するには、プログラムの実行に必要なすべてのクラスが含まれるように、システム環境変数CLASSPATH
を定義する必要があります。これには、プログラムで使用される、JDeveloperによって提供されるすべてのライブラリ・クラスが含まれます。
JDeveloperライブラリのCLASSPATHの使用方法
JDeveloperには、J2SE、サードパーティの開発者、オラクル社から提供され、Javaプログラムの生成に役立つ数百のライブラリ・クラスが付属しています。
JDeveloperには、Javaプログラムの生成に役立つ数百のライブラリ・クラスが付属しています。クラスは、J2SE、サード・パーティの開発者、およびオラクル社から提供されます。各ライブラリは、アップグレードを容易に行うために個別に管理されます。このため、JDeveloperで作成するプログラムをコマンド・プロンプト画面から実行するには、クラスパスに多数のアーカイブ・ファイルを含める必要があります。
プロジェクトで使用される各ライブラリへのパスのみをリストに含めることをお薦めします。プロジェクトで使用されないパスをリストに含めた場合でもプログラムは起動しますが、パフォーマンス上の理由から、不要なライブラリはすべて排除してください。
ノート:
パスの1つにスペースが含まれる場合でも、クラスパスに引用符を使用しないでください。
プロジェクトを含めるようにCLASSPATHを設定する
出力パスにデフォルトのディレクトリを設定する場合、クラスパスの最後にクラス・ディレクトリを追加し、java.exe
を使用してJavaアプリケーションをテストします。
出力パスにデフォルトのディレクトリを使用した場合、クラスパスに次のディレクトリを追加し、java.exeを使用してJavaアプリケーションをテストできます。
C:\<jdev_install>\jdeveloper\jdev\mywork\Workspace1\Project1\classes
この変数を設定することで、java.exe
を使用して、出力ディレクトリmywork
からアプリケーションを実行できます。
Javaプログラムを他のディレクトリにデプロイした場合、アプリケーション・パッケージの親ディレクトリへのパスを追加する必要があります。
CLASSPATH
変数は長い文字列であるため、入力を誤る可能性があります。CLASSPATH
をシステム環境変数として設定すると、入力時間と入力ミスを減らすことができます。
CLASSPATHパラメータの設定(java.exeの場合)
Javaランタイム・エンジン(java.exe
)ではCLASSPATH
環境変数は使用しません。そのため、Javaプログラムに対する完全なCLASSPATH
またはclasspath
をパラメータとしてjava.exe
コマンドに含める必要があります。
Javaランタイム・エンジン(java.exe
)では、CLASSPATH
環境変数は使用しません。CLASSPATH
を、java.exeコマンドのパラメータとして使用する必要があります。コマンドの書式は次のとおりです。
java -cp <classpath> package.Application
classpathは、Javaプログラムおよびプログラムで使用される依存クラスへの完全なCLASSPATH
です。CLASSPATH
ディレクトリ名にスペースが含まれない場合、引用符は使用しなくてもかまいません。
Javaプログラムのデバッグ
ローカル・デバッガおよびリモート・デバッガにより、コードを調べて問題のある領域を特定し修正するための多くの機能が提供されます。
デバッガにより、コードを調べて問題のある領域を特定し修正するための多くの機能が提供されます。コードの分析には、ローカルとリモートの2種類のデバッグが可能です。
ローカルのデバッグ・セッションは、ソース・ファイルにブレークポイントを設定してからデバッガを起動することで、開始されます。JDeveloperでサーブレットなどのアプリケーションをデバッグする際は、実行フローを完全に制御して、変数の値を表示および変更できます。また、クラス・インスタンスのカウント数とメモリー使用量を監視することによって、アプリケーションのパフォーマンスを調べることができます。JDeveloperは、アプリケーションから他のソース・ファイルへのコールに従うか、またはソース・ファイルが使用できない場合はスタブ・クラスを生成します。
リモート・デバッグでは、2つのJDeveloperプロセスが必要です。1つはデバッガ・プロセス、もう1つはデバッグ対象プロセスです。デバッグ対象プロセスは異なるプラットフォームに存在している場合があります。デバッグ対象プロセスが開始し、デバッガ・プロセスがそのデバッグ対象プロセスにアタッチされた後は、リモート・デバッグとローカル・デバッグの動作は似ています。
表12-1は、コード内で問題のある領域を効率的に特定できるようにする特殊な目的のデバッグ・ウィンドウを示しています。
表12-1 デバッグ・ウィンドウ
ウィンドウ | 説明 |
---|---|
ブレークポイント |
現在のワークスペースとプロジェクトのブレークポイントを表示します。「「ブレークポイント」ウィンドウの使用方法」を参照してください。 |
スマート・データ |
実行中のコードで使用されているデータを表示します。「「スマート・データ」ウィンドウの使用方法」を参照してください。 |
データ |
現在のコンテキストの引数とローカル変数を表示します。「プロジェクト・プロパティ」ダイアログの「コンパイラ」ページで、「完全なデバッグ情報」が選択されている必要があります。「「データ」ウィンドウの使用方法」を参照してください。 |
ウォッチ |
フィールドまたは変数に対して作成された監視を表示します。監視式は、現在のコンテキストに応じて式を評価します。新しいコンテキストに移動すると、その新しいコンテキストに対して式が再評価されます。「「ウォッチ」ウィンドウの使用方法」を参照してください。 |
インスペクタ |
1つのデータ項目を専用のフローティング・ウィンドウに表示します。インスペクタは、現在のコンテキストに応じて式を評価します。「「インスペクタ」ウィンドウの使用方法」を参照してください。 |
ヒープ |
デバッグ中のプログラムのヒープに関する情報を表示します。プログラムのメモリー・リークの検出に役立ちます。「「ヒープ」ウィンドウの使用方法」を参照してください。 |
スタック |
現在のスレッドのコール・スタックを表示します。「「スタック」ウィンドウの使用」を参照してください。 |
クラス |
各クラスの名前およびパッケージなど、アプリケーションが実行される際にロードされたクラスに関する情報を表示します。デバッガによって、各クラスのライブ・インスタンスの数、およびこれらのインスタンスで消費されるメモリーの量も表示できます。「「クラス」ウィンドウの使用方法」を参照してください。 |
モニター |
アプリケーションのアクティブなモニターに関する情報に加えて、それらのモニターにアクセスするスレッドのステータス情報も表示します。このウィンドウは、デッドロックや他のスレッドの同期化に関する問題を調べる場合に役立ちます。「「モニター」ウィンドウの使用方法」を参照してください。 |
スレッド |
スレッドおよびスレッド・グループを表示し、現在のスレッドを強調表示します。また、各スレッドの名前、ステータス、優先度およびグループを表示します。「「スレッド」ウィンドウの使用方法」を参照してください。 |
デバッガのアイコンの理解
「デバッガ」ウィンドウや「ログ」ウィンドウなどのJDeveloperユーザー・インタフェースには、様々なデバッガ機能およびランナー機能があります。
表12-2は、様々なJDeveloperのデバッガおよびランナー・アイコンを示しています。これらのアイコンは、「デバッガ」ウィンドウおよび「ログ」ウィンドウなど、JDeveloperのユーザー・インタフェースの各領域で使用されます。
表12-2 デバッガおよびランナー・アイコン
アイコン | 名前 | 説明 |
---|---|---|
配列 |
JDeveloperのすべてのデータ関連ウィンドウの配列クラスを表します。 |
|
ブレークポイントの追加 |
ブレークポイントの作成に使用する「ブレークポイント」ツールバー・ボタンを表します。 |
|
「ブレークポイント」メニュー |
「表示」→「デバッガ」→「ブレークポイント」メニュー・オプション、または「ブレークポイント」ウィンドウのタブ・アイコンを表します。 |
|
クラス |
「表示」→「デバッガ」→「クラス」 メニュー・オプション、「クラス」ウィンドウのタブ・アイコン、および「クラス」ウィンドウのクラスを表します(クラスのトレースが無効の場合はグレー表示)。 |
|
行番号表がない「クラス」 |
「クラス」ウィンドウに表示されます。行番号表がないクラス(曖昧なクラス)を表します。 |
|
現在の実行ポイント |
ソース・エディタのマージンに表示される現在の実行ポイントを表します。「実行」→「実行中の行を表示」メニュー・オプションを選択して表示できます。 |
|
現在のスレッド |
スレッド・ウィンドウの現在のスレッドを表します。 |
|
データ |
「表示」→「デバッガ」→「データ」メニュー・オプション、「表示」→「デバッガ」→「スマート・データ」メニュー・オプション、および「データ」ウィンドウと「スマート・データ」ウィンドウのタブ・アイコンを表します。 |
|
デバッグ([Shift]+[F9]) |
「実行」→「 <project_name>のデバッグ」メニュー・オプション、「デバッグ」ツールバー・ボタン、「プロセス」ウィンドウのプロセス・フォルダに含まれるデバッグ・プロセス、デバッグ・プロセスのログ・ページ、デバッグ・レイアウト、「リモート・デバッグとプロジェクトのプロファイリング」ウィザードを表します。 |
|
デバッグ・リスナー・ノード |
「プロセス」ウィンドウでdebug listenerノードを表します。 |
|
ブレークポイントの削除 |
ツールバーのブレークポイントの削除を表します。クリックすると、ブレークポイントが削除されます。 |
|
無効化 |
ソース・エディタのマージンおよび「ブレークポイント」ウィンドウ内の無効なブレークポイントを表します。また、このアイコンは、ツールバーの「ブレークポイントの無効化」コマンドを表します。クリックすると、ブレークポイントが無効になります。 |
|
すべてのブレークポイントの削除 |
ツールバーの「すべてのブレークポイントの一時停止」コマンドを表します。クリックすると、ブレークポイントで停止せずにアプリケーションが実行され、デバッグ・モードに戻ります。 |
|
ブレークポイントの編集 |
ツールバーの「ブレークポイントの編集」コマンドを表します。これは、選択したブレークポイントの編集に使用できます。 |
|
有効 |
ソース・エディタのマージンのアクティブなブレークポイント、およびツールバーの「ブレークポイントの有効化」コマンドを表します。クリックすると、選択したブレークポイントが有効になります。デバッガが実行中でない場合、有効なブレークポイントのアイコンは、未確認ブレークポイントのアイコンと同様の外観です。 |
|
ガベージ・コレクション |
「実行」→「ガベージ・コレクション」メニュー・オプション、およびクリック可能なツールバーの「ガベージ・コレクション」コマンドを表します。 |
|
インタフェース |
クラス・ウィンドウのインタフェースを表します。 |
|
ヒープ |
「表示」→「デバッガ」→「ヒープ」メニュー・オプション、および「ヒープ」ウィンドウのタブ・アイコンを表します。 |
|
ヒープ・フォルダ |
ヒープ・ウィンドウのフォルダを表します。 |
|
メソッド |
スタック・ウィンドウのメソッドを表します。 |
|
モニター |
「表示」→「デバッガ」→「モニター」メニュー・オプション、および「モニター」ウィンドウのタブ・アイコンを表します。 |
|
オブジェクト |
JDeveloperのすべてのデータ関連ウィンドウのオブジェクトを表します。 |
|
パッケージ |
クラス・ウィンドウのパッケージを表します(パッケージのトレースが無効な場合はグレー表示)。 |
|
プログラムの停止 |
「実行」→「プログラムの停止」メニュー・オプション、およびクリック可能な「プログラムの停止」ツールバー・ボタンを表します。 |
|
プリミティブ |
JDeveloperのすべてのデータ関連ウィンドウの基本項目を表します。 |
|
再開 |
「実行」→「再開」メニュー・オプション、およびクリック可能な「再開」ツールバー・ボタンを表します。 |
|
実行 |
「プロセス」ウィンドウで、実行中プロセスの場合はログ・ページで、および選択したノードを実行する場合はツールバーで、実行中のプロセスを表します。 |
|
カーソルまで実行([F4]) |
「実行」→「カーソルまで実行」メニュー・オプションを表します。指定した場所までコードを実行します。 |
|
スタック |
「ウィンドウ」→「デバッガ」→「スタック」メニュー・オプション、および「スタック」ウィンドウのタブ・アイコンを表します。 |
|
スタック・フォルダ |
「データ」ウィンドウのstaticフォルダを表します。 |
|
メソッドの最後まで実行 |
「実行」→「メソッドの最後まで実行」メニュー・オプションおよびクリック可能な「メソッドの最後まで実行」ツールバー・ボタンを表します。 |
|
トレース実行([F7]) |
「実行」→「トレース実行」メニュー・オプション、およびクリック可能な「トレース実行」ツールバー・ボタンを表します。 |
|
ステップ・アウト([Shift]+[F7]) |
「実行」→「ステップ・アウト」メニュー・オプション、およびクリック可能な「ステップ・アウト」ツールバー・ボタンを表します。 |
|
ステップ実行 |
「実行」→「ステップ実行」メニュー・オプション、およびクリック可能な「ステップ実行」ツールバー・ボタンを表します。 |
|
終了 |
クリックして、アプリケーションのデバッグを停止できる終了ツールバー・ボタンを表します。 |
|
スレッド |
「ウィンドウ」→「デバッガ」→「スレッド」メニュー・オプション、および「スレッド」ウィンドウのタブ・アイコンを表します。 |
|
スレッド・グループ |
スレッド・ウィンドウのスレッド・グループを表します。 |
|
未確認ブレークポイント |
ソース・エディタのマージンおよび「ブレークポイント」ウィンドウの未確認ブレークポイントを表します。 |
|
確認済ブレークポイント |
ソース・エディタのマージンで検証済ブレークポイントを表します。 |
統合WebLogic Serverにデプロイされたアプリケーションのデバッグ
統合WebLogic Serverにデプロイされたアプリケーションをデバッグする際、ファイルに加えた変更は実行中のアプリケーションに反映されます。その際にアプリケーションを停止したり再デプロイする必要はありません。
統合WebLogic Serverにデプロイされたアプリケーションをデバッグする際、ファイルに変更を加えることができ、その変更は実行中のアプリケーションに反映されます。その際にアプリケーションを停止したり再デプロイする必要はありません。アプリケーションをデバッグするには、サーバーをデバッグ・モードで起動します。ORACLE_HOME/jdeveloper/jdev/bin
に移動してjava -?
を実行すると、実行しているJDKのバージョンに利用可能な実行構成オプションが表示されます。
-
JSFファイルの変更
変更したページを現在表示している場合は、ブラウザを保存してリフレッシュします。あるいは、表示していない場合はそのページに移動します。加えられたばかりの変更がページに反映されます。
-
変更を保存して再コンパイルします。変更されたコードが次に実行されるときに、アプリケーションを再起動することなく変更を確認できます。
ブレークポイントで停止したときには、次の操作を実行できます。
-
現在停止しているメソッドを含め、現在停止しているクラスを変更します。
-
エディタを右クリックして、個々のクラスを再ビルドします。
-
「スタック」タブを選択します(このタブは、デフォルトでは、「アプリケーション」ウィンドウで「構造」タブに分類されています)。スタックの最上部に、停止しているメソッドが廃止されたことが表示されます。
-
前のメソッドを右クリックして、「ここに戻る」メニュー項目を選択します。廃止されたメソッドを呼び出したコードにカーソルが再配置されます。
実行を再開すると、クラスまたはメソッドに加えられた変更が反映されます。
ノート:
クラスに対してプライベートなコードのみを変更できます。再コンパイル後にコンソール出力を確認します。出力により、再コンパイルされたコードが実行時に使用可能かどうかが明確になります。
JDeveloperでのプロジェクトのデバッグ方法
デバッグ情報でコードをコンパイルして、「データ」ウィンドウで引数やローカル変数を確認するなどのデバッガ機能を使用します。ブレークポイントを設定し、コードをステップ実行する手順を使用してください。
「データ」ウィンドウで引数やローカル変数を確認するなど、デバッガ機能の一部を使用するためには、先にデバッグ情報付きでコードをコンパイルする必要があります。これによって、アプリケーションのデバッグとテスト時に時間が節約されます。
ブレークポイントを設定し、コードをステップ実行するには:
編集および再コンパイル方法
デバッグ中にHotSwap機能を使用して、アプリケーションを停止したり再起動せずに、エラーを修正し、クラス定義を置き換えます。HotSwapは、Java Platform Debugger Architectureの拡張機能で、JDeveloperのJVMに実装されています。
デバッグ中にHotSwap機能を使用すると、アプリケーションを停止したり再起動せずに、エラーを修正し、修正されたクラス定義を置き換えることができます。HotSwapは、Java 2 SDK v1.4のJava Platform Debugger Architecture (JPDA)の拡張機能で、JDeveloperのJava Virtual Machine (OJVM)に実装されています。
デバッガの一時停止中に、クラスを再コンパイルできます。コードがホットスワップされた後にデバッガが再開すると、古いメソッド定義を現在実行しているスレッドは、そのメソッドが戻るまで実行を続行します。後続のメソッド・コールでは、クラス定義が使用されます。ただし、クラスの既存のインスタンスは変更されず、クラス変数もリセットされません。クラス・メソッドのロジックを変更するには、HotSwapを使用してください。フィールドやメソッドの追加または削除など大幅な変更を行う場合は、ほとんどの場合、HotSwapは使用できません。
FastSwapデプロイメントによる再デプロイメントの最小化
デプロイ済のWebアプリケーションに加えられた変更は、ブラウザをリフレッシュすると表示されことが期待されています。IDEは、編集ステップとビルド・ステップの段階的なコンパイル・サポートを提供します。サーバー側では、JDeveloperのWebLogic Server FastSwapデプロイメント機能がスムーズなデプロイ・サイクルとテスト・サイクルを実現しています。
Webアプリケーション開発者は、デプロイされたアプリケーションに変更を加えたら、その変更をブラウザをリフレッシュしてすぐに確認したいと考えています。Java EEサイドで作業中の変更を確認するには、開発者は通常、次のサイクルを行う必要があります。
編集 ->ビルド ->デプロイ ->テスト
これらのステップでは、多くの記述子要素が必要であり、Java EEを使用したアプリケーション開発が複雑で最初の工程に負担がかかるのはそのためです。これらのステップのビルド・サイクルとデプロイ・サイクルは、Javaおよび使用するアプリケーション・サーバーで必要になります。IDEでは、段階的なコンパイル・サポートによって編集ステップとビルド・ステップをシームレスに行うことができます。また、サーバー側では、JDeveloperで使用できるWebLogic Server FastSwapデプロイメント機能がデプロイ・サイクルとテスト・サイクルのシームレス化を実現しています。
FastSwapデプロイメントの仕組み
Java EE動的クラスの定義は宣言されたフィールドに制限され、クラスのメソッドを変更することはできません。FastSwapの目的は、WebLogic Serverにおいてこの制限を緩和し、新しい形式のクラスを動的に再定義できるようにして反復的な開発を容易にすることです。
Java EE 5では、クラスローダーを削除したり既存のインスタンスを破棄したりすることなく、実行時にクラスを再定義する機能が導入されています。これにより、コンテナは実行中のアプリケーションに影響を与えることなく、変更されたクラスを再ロードできるため、反復的な開発サイクル時間が大幅に短縮され、開発およびテスト全体が改善されています。しかし、クラス(宣言されたフィールドとメソッド)の形式が変更できないという制限によって、Java EE動的クラスの再定義は大幅に制限されます。FastSwapの目的は、WebLogic Serverにおいてこの制限をなくし、新しい形式のクラスを動的に再定義できるようにして反復的な開発を容易にすることです。
FastSwapを使用すると、ClassLoaderを再ロードせずにインプレースでJavaクラスを再定義するため、所要時間を短縮できるという点で明らかに有利です。つまり、アプリケーションが再デプロイするまで待機した後に作業していたWebページ・フローに戻るということをしないで済みます。代わりに、変更を追加すると、自動でコンパイルされ、すぐに結果が確認できます。
FastSwapでサポートされるアプリケーション構成
FastSwapデプロイメントでは、WebLogic Serverを開発モードで実行する必要があります。展開されたディレクトリ内のクラス・ファイルへの変更がサポートされます。
FastSwapデプロイメントを使用する場合、次のアプリケーション構成がサポートされます。
-
FastSwapは、WebLogic Serverが開発モードで実行している場合にのみサポートされます。本番モードの場合は、自動的に無効になります。
-
展開されたディレクトリ内のクラス・ファイルへの変更のみサポートされます。アーカイブされたアプリケーション内のクラス・ファイルや、アプリケーションのクラスパスに含まれるアーカイブされたJARファイルへの変更はサポートされません。次に例を示します。
-
EARに含まれるアーカイブされたWARとしてWebアプリケーションがデプロイされる場合、クラスへの変更はFastSwapエージェントによって認識されません。
-
展開されたWebアプリケーション内のJavaクラスへの変更は、
WEB-INF/classes
ディレクトリ内でのみサポートされ、FastSwapエージェントはWEB-INF/lib
に含まれるアーカイブされたJARへの変更は認識しません。
-
アプリケーションにおけるFastSwapの有効化
Oracle WebLogicサーバーのデプロイメント・ディスクリプタをweblogic-application.xml
ファイルに作成することによって、アプリケーションでFastSwapを有効にします。
アプリケーションでFastSwapを有効にするには、Oracle WebLogicデプロイメント・ディスクリプタweblogic-application.xml
を作成してFastSwapを有効にします。
スタンドアロンのWebアプリケーションでFastSwapを有効にするには、WebLogicデプロイメント・ディスクリプタweblogic.xml
を作成してFastSwapを有効にする方法もあります。
FastSwapプロセスの概要
FastSwapデプロイメント・プロセスのステップを示します。
「FastSwap使用時の制限」を参照してください。
FastSwapデプロイメント・プロセスのステップを以下に示します。
-
記述子レベルでFastSwapが有効になると、アプリケーションがWebLogic Serverにデプロイされ、適切なクラスローダーがインスタンス化されます。
-
ブラウザをオープンして動作中のアプリケーションを確認します。メソッドおよび/またはクラスを変更(追加/編集/削除)してからコンパイルします。
FastSwapエージェントはJavaファイルをコンパイルしません。
-
ブラウザをリフレッシュするか、アプリケーションに新しいリクエストを送信します。
FastSwapエージェントは、クラスパスに含まれるすべてのディレクトリを検索することによって、最後の反復処理から変更されたすべてのクラスを検索しようとします。展開されたアプリケーションが単一のWebアプリケーションである場合、次のディレクトリに対してタイムスタンプに基づいてクラス・ファイルの変更の有無が調査されます。
ExampleApp/APP-INF/classes ExampleApp/webapp/WEB-INF/classes
FastSwapエージェントは、アプリケーションの変更されたクラスを再定義し、リクエストを処理します。
FastSwapでサポートされるアプリケーション・タイプと変更
JDeveloperでは、FastSwapは、展開形式でデプロイされたPOJO、Webアプリケーションおよびエンタープライズ・アプリケーションでサポートされますが、リソース・アダプタではサポートされません。
FastSwapは、展開形式でデプロイされたPOJO (JAR)、Webアプリケーション(WAR)、およびエンタープライズ・アプリケーション(EAR)でサポートされます。FastSwapは、リソース・アダプタ(RAR)ではサポートされません。
FastSwapでサポートされる変更のタイプを以下に示します。
-
静的メソッドの追加
-
静的メソッドの削除
-
インスタンス・メソッドの追加
-
インスタンス・メソッドの削除
-
静的メソッド本体の変更
-
インスタンス・メソッド本体の変更
-
静的フィールドの追加
-
静的フィールドの削除
-
インスタンス・フィールドの追加
-
インスタンス・フィールドの削除
次の表に、FastSwapでサポートされる変更タイプの詳細を示します。
表12-3 サポートされるアプリケーション・タイプおよび変更
スコープ | Javaの変更タイプ | サポート | ノート |
---|---|---|---|
Javaクラス |
メソッドの追加 |
はい |
|
インスタンス(非抽象) |
メソッドの削除 |
はい |
|
a)フィールドの追加 |
はい |
||
b)フィールドの削除 |
はい |
||
c)メソッド本体の変更 |
はい |
||
d)コンストラクタの追加 |
はい |
||
e)コンストラクタの削除 |
はい |
||
f)フィールド修飾子の変更 |
はい |
||
g)メソッド修飾子の変更 |
はい |
||
クラス・レベル(静的) |
メソッドの追加 |
はい |
|
メソッドの削除 |
はい |
||
メソッド本体の変更 |
はい |
||
クラス階層の変更 |
実装インタフェースのリストの変更 |
いいえ |
|
「SuperClass」拡張の変更 |
いいえ |
||
抽象Javaクラス |
抽象メソッドの追加 |
はい |
|
抽象メソッドの削除 |
はい |
||
インスタンス |
はい |
||
「final」Javaクラス |
インスタンス |
はい |
|
「final」Javaメソッド |
インスタンス |
はい |
|
「final」Javaフィールド |
インスタンス |
はい |
|
Enum |
定数の追加 |
いいえ |
|
定数の削除 |
いいえ |
||
メソッドの追加/削除 |
いいえ |
||
無名内部クラス |
フィールドの追加/削除 |
NA |
Java言語でサポートされない |
メソッドの追加/削除 |
いいえ |
||
静的内部クラス |
インスタンス |
はい |
|
メンバー内部クラス(非静的内部クラス) |
インスタンス |
はい |
|
ローカル内部クラス |
インスタンス |
はい |
|
Javaインタフェース |
メソッドの追加 |
はい |
|
Javaリフレクション |
既存のフィールド/メソッドへのアクセス |
はい |
|
新しいメソッドへのアクセス |
いいえ |
リフレクションでは新しいメソッドは公開されません。一部の合成メソッドは公開されます。 |
|
新しいフィールドへのアクセス |
いいえ |
リフレクションでは新しいフィールドは公開されません。 |
|
クラスのアノテーション |
メソッド/フィールド・アノテーションの追加または削除 |
いいえ |
|
注釈タイプ |
メソッド/属性の追加または削除 |
いいえ |
|
例外クラス |
インスタンス |
はい |
|
EJBインタフェース |
メソッドの追加/削除 |
いいえ |
EJBインタフェースの変更には、フル・サポートではないリフレクションを使用。 |
EJB 3.0セッション/MDB EJB実装クラス |
メソッドの追加/削除 |
いいえ |
EJBクラスによって参照されるサポート・クラスは変更可能です。 |
フィールドの追加/削除 |
いいえ |
||
EJB 3.0エンティティBean |
メソッドの追加/削除 |
いいえ |
EJBクラスによって参照されるサポート・クラスは変更可能です。 |
フィールドの追加/削除 |
いいえ |
||
EJBインターセプタ |
メソッドの追加/削除 |
いいえ |
EJBクラスによって参照されるサポート・クラスは変更可能です。 |
フィールドの追加/削除 |
いいえ |
FastSwap使用時の制限
EJBインタフェースでJava注釈やメソッドの追加または削除がサポートされないなど、様々な制限がFastSwapデプロイメントに関連付けられています。
FastSwapデプロイメントを使用する場合、次のような制限が適用されます。
-
Javaリフレクションの結果には、新しく追加されたフィールドとメソッドが含まれず、削除されたフィールドとメソッドが含まれます。その結果、リフレクションAPIを使用すると、予期しない結果になる可能性があります。
-
既存のクラスの階層は、FastSwapでは変更できません。たとえば、クラスの実装インタフェースのリストの変更や、クラスのスーパークラスの変更はサポートされません。
-
Javaアノテーションの追加または削除は、FastSwapではサポートされません(上述のリフレクション変更に関係するため)。
-
EJBインタフェースの追加または削除は、EJBコンパイル・ステップで実行時に変更を反映する必要があるため、FastSwapではサポートされません。
-
Enumの定数の追加または削除はサポートされません。
-
finalizeメソッドの追加または削除はサポートされません。
-
フィールド名を変更する場合、オブジェクトの状態は保持されません。これは、古い名前のフィールドを削除し、新しい名前のフィールドを追加する場合の変更です。この場合、古いフィールドの状態はすべて、名前変更後のフィールドに持ち越されません。インスタンスの値がリセットされることを踏まえた上でフィールド名を変更してください。
FastSwapでサポートされない変更の処理
FastSwapが有効な場合、既存のクラスローダーにクラスを再定義します。再定義が失敗した場合、JVMによって「ログ」ウィンドウとサーバー・ログ・ファイルの両方にUnsupportedOperationException
がスローされます。アプリケーションの実行は継続されます。
FastSwapが有効な場合、クラスを再コンパイルした後にFastSwapは既存のクラスローダーにクラスを再定義しようとします。行った変更がFastSwapでサポートされる変更のスコープ外である場合、再定義は失敗し、JVMによって「ログ」ウィンドウとサーバー・ログ・ファイルにUnsupportedOperationException
がスローされます。アプリケーションは変更を反映しませんが、実行は継続されます。
変更を反映するには、アプリケーション・タイプと変更の範囲に応じて、アプリケーションまたは影響を受けるモジュール(部分的な再デプロイ)を再デプロイします。
ADFコンポーネントのデバッグ方法
JDeveloperは、アプリケーションをブレークポイントでデバッグできるようにADF宣言デバッガをサポートします。また、ブレークポイントのタイプによって、アプリケーションが1つのブレークポイントから別のブレークポイントに移動する方法が決定します。アプリケーションの実行は、バインディング・コンテナの機能について、使用可能なデータと予測されるデータを簡単に比較できるように一時停止されます。
JDeveloperでは、ADF宣言デバッガを使用してブレークポイントに対するデバッグを実行できます。エラーを簡単に特定できない場合は、JDeveloperでADF宣言デバッガを使用してブレークポイントを設定できます。ブレークポイントに達すると、アプリケーションの実行が一時停止され、Oracle ADFバインディング・コンテナの作業対象データを調べて、予測されるデータと比較することができます。ブレークポイントのタイプによっては、ステップ機能を使用して、1つのブレークポイントから別のブレークポイントに移動することができます。
表12-4は、JDeveloperがADFコンポーネントのデバッグに使用できるウィンドウを示しています。
表12-4 ADFコンポーネントのデバッグ・ウィンドウ
ウィンドウ | 説明 |
---|---|
ADFデータ |
アプリケーションがブレークポイントで一時停止すると、「ADF構造」ウィンドウでの選択内容に基づいて、関連データを表示します。詳細は、「「データ」ウィンドウの使用方法」を参照してください。 |
ELエバリュエータ |
デバッグ・セッション中にブレークポイントに達したときにEL式を評価します。JSFアプリケーションのみがELエバリュエータを使用できます。 |
ADF構造 |
ブレークポイントでアプリケーションが停止すると、ここにADFランタイム・オブジェクトとその関係のツリー構造を表示します。詳細は、「構造」ウィンドウを参照してください。 |
各デバッガ・ウィンドウに表示する情報のタイプを制御できます。表示する列など、各ウィンドウで使用できるオプションを確認するには、ウィンドウを右クリックして、ポップアップ・メニューから「プリファレンス」を選択します。またはメイン・メニューから「ツール」→「プリファレンス」を選択し、「デバッガ」ノードを展開して、各デバッガ・ウィンドウの設定ページを表示することもできます。また、デバッグ情報をテキスト出力ファイルまたはHTML出力ファイルとして保存することもできます。「デバッグ情報をファイルにエクスポートする方法」を参照してください。
JDeveloperデバッガを使用してプログラムを実行する方法
JDeveloperデバッガを使用してプログラムの実行を制御する手順を使用してください。修正が有効であることを確認する場合は、デバッグ・セッションを終了してコードを修正し、再コンパイルして変更を保存します。
JDeveloperデバッガを使用してプログラムの実行を制御するには:
終了すると、プログラム値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定します。
デバッグ用にプロジェクトを構成する方法
パッケージおよびクラスを有効または無効にしたり、リモート・デバッグ・オプションを設定するなど、プログラムのデバッグ方法を管理します。JDeveloperでデバッガおよびリモート・デバッガのオプションを設定する手順を使用してください。
JDeveloperでは、パッケージおよびクラスを有効または無効にしたり、リモート・デバッグ・オプションを設定するなど、プログラムのデバッグ方法を制御できます。
JDeveloperでデバッガおよびリモート・デバッガのオプションを設定するには:
- 「アプリケーション」→「デフォルト・プロジェクト・プロパティ」(すべてのプロジェクトに適用されるプリファレンスを設定するため)を選択します。
- 「アプリケーション」→「プロジェクト・プロパティ」(現在のプロジェクトのみに適用されるプリファレンスを設定するため)を選択します。
- 「実行/デバッグ」ノードを選択します。
- 実行構成を選択します。
- 「編集」をクリックします。
- 「ツール設定」→「デバッガ」を選択します。
- 「デバッガ」ページおよび「リモート」ページでオプションを設定します。
- 終了したら、「OK」をクリックします。
デバッガ開始オプションの設定方法
デバッガ開始オプションを設定して、新しいデバッグ・セッション開始時のデバッガの動作を指定します。デバッガ開始オプションを設定する手順を使用してください。
デバッガ開始オプションを設定することで、新しいデバッグ・セッション開始時の、デバッガの動作を指定できます。具体的には、ブレークポイントに達するまでデバッガを実行させるか、もしくはプロジェクトのコード(たとえばアプリケーションのメイン・メソッドの先頭)に達した時点でデバッガを停止させるかを指定します。
デバッガ開始オプションを設定するには:
ノート:
[F7]を押して、トレース実行する必要のあるメソッドの選択を表示できます。複数のメソッドがある場合、[F7]を押すと、これらのメソッドが強調表示されます。トレース実行するメソッドをクリックできます。
行に複数のメソッド・コールがあり、必要なメソッド・コールが最初に表示されるとは限らない場合に、この機能が役立ちます。
デバッガの起動方法
プロジェクトが正常にビルドされたらデバッガを起動するため、「プロジェクト・プロパティ」の「コンパイラ」ページでビルド・オプションを指定してプロジェクトをビルドします。プロジェクトをビルドしてデバッガを起動する手順を使用してください。
デバッグの前にプロジェクトをビルドする必要があります。プロジェクトは、「プロジェクト・プロパティ」の「コンパイラ」ページで指定したオプションを使用してビルドされます。
プロジェクトをビルドしてデバッガを起動するには:
プロジェクトのビルドに成功すると、デバッガが起動します。
デバッグ情報をファイルにエクスポートする方法
デバッガ・ウィンドウから、JDeveloperデバッガがテキストまたはHTML出力ファイルに生成するデバッグ情報をエクスポートします。デバッグ情報をファイルにエクスポートする手順を使用してください。
JDeveloperのデバッガによって生成されたデバッグ情報は、デバッガ・ウィンドウのいずれかからテキスト出力ファイルまたはHTML出力ファイルにエクスポートできます。
デバッグ情報をファイルにエクスポートするには:
- ツールバーで「デバッグ」をクリックし、デバッグを開始します。
- デバッガがブレークポイントで停止すると、エクスポートする情報が含まれているデバッガ・ウィンドウを見つけます。
- デバッガ・ウィンドウで右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。
- 該当する「プリファレンス - デバッガ」ページの「列」の下で、「デバッガ」ウィンドウおよび出力ファイルで表示または非表示にする列を選択します。
- 「OK」をクリックして「プリファレンス」ダイアログを閉じます。
- デバッガ・ウィンドウで右クリックし、「エクスポート」を選択します。
- 「エクスポート」ダイアログで、ファイルの名前を入力します。出力ファイルはテキスト・ファイルとして保存され、列の間にはタブが、行の間には改行が挿入されます。HTMLファイルにエクスポートする場合は、
.html
拡張子または.htm
拡張子(大/小文字の区別なし)を追加します。
デバッグ時のソース・エディタの使用方法
デバッガが停止すると、ソース・エディタに現在開いているクラスのソース・ファイルが表示され、実行アイコンが示されます。
(ブレークポイントで、ステップ・コマンド完了後、または一時停止によって)デバッガが停止すると、ソース・エディタに現在のクラスのソース・ファイルが開き、次の図に示すように実行ポイントが示されます。
図12-1 「実行ポイント」アイコン
JDeveloperでは、デバッグ中にクラスのソース・ファイルが見つからない場合、「ソース・ファイルが見つかりません」ダイアログが表示され、ソース・ファイルの場所の入力を求めるメッセージが表示されます。
ソース・エディタを使用して、次のデバッグを実行できます。
-
値を表示するために変数名の上をホバーします。
-
ブレークポイントを設定して、ソース・エディタの余白をクリックします。
-
ブレークポイントを削除し、ソース・エディタの余白でブレークポイントをクリックします。
図12-2 「ブレークポイント」アイコン
ポップアップ・メニュー項目の使用
デバッガにより、「カーソルまで実行」、「ウォッチ」、「インスペクト」および「カーソル位置のトレース実行メソッド」メニュー項目がソース・エディタのポップアップ・メニューに追加されます。
デバッガにより、ソース・エディタのポップアップ・メニューには表12-6に示すようなメニュー項目が追加されます。
表12-6 デバッガのポップアップ・メニュー項目
項目 | 機能 |
---|---|
カーソルまで実行 |
カーソルの現在位置まで実行し、その位置に到達するまでコードを実行します。 |
ウォッチ([Ctrl]+[F5]) |
「監視」ウィンドウに式を追加します。 |
インスペクト |
フロートしている「インスペクタ」ウィンドウを開きます。 |
カーソル位置のトレース実行メソッド |
「カーソルまで実行」を実行してから、現在のカーソル位置にあるメソッドをトレース実行します。 |
ツールチップの使用
データ・アイテム名の上にマウスを合わせると、デバッガによりソース・エディタにツールチップが表示されます。デフォルトでは、ツールチップにデータ項目の名前、値、タイプが表示され、「データ」ウィンドウまたは「監視式」ウィンドウに追加することなく、データ項目を簡単にインスペクトできます。データ項目が配列またはオブジェクトの場合は、オブジェクト階層の下位にある、選択した項目の子もインスペクトできます。ツールチップに表示される子データ項目は20個までで、残りのデータ項目を表示するにはナビゲーション・ボタンを使用してください。
このツールチップに表示される列は、「ツール」→「設定」→「デバッガ」→「ツールチップ」ページで有効にした列設定によって異なります。
プロジェクトのビルドに成功すると、デバッガが起動します。
デバッガでのJava式の使用方法
デバッガの「ウォッチ」ウィンドウ、「インスペクタ」ウィンドウ、ブレークポイント条件、ブレークポイント・ログ式で使用する有効なJava式を指定して、モニターおよび評価を行います。
Java式は、「監視式」ウィンドウ、「インスペクタ」ウィンドウ、ブレークポイント条件、ブレークポイント・ログ式で使用されます。デバッガで監視またはインスペクトするJava式を指定できます。式は、デバッガで評価できる有効なJava式にする必要があります。デバッガでは、表12-7に示した形式のJava式を使用できます。
表12-7 デバッガで使用できるJava式
Java式 | フォーム |
---|---|
単純変数名 |
|
フィールド・アクセス |
|
メソッド・コール |
|
配列要素 |
|
配列長さ |
|
比較演算 |
|
算術演算 |
|
論理演算 |
|
演算子のインスタンス |
|
シフト演算子 |
|
バイナリ演算子 |
|
疑問符とコロンを使用した演算 |
|
staticフィールド名 |
|
完全修飾クラス名 |
j |
デバッグ中のコード内の移動
デバッガを使用して、JDeveloperでプログラムの1コード行、メソッドまたはコード・ブロックを実行する方法を管理します。「トレース実行」および「ステップ実行」コマンドを使用して、プログラム・コードを横断します。
JDeveloperのデバッガでは、プログラムの実行を制御できます。つまり、プログラムの1コード行、メソッド全体またはプログラム・ブロック全体を実行するかどうかを制御できます。プログラムの実行と一時休止のタイミングを手動で制御することにより、正常に機能していることがわかっているセクションを素早く通過し、問題の原因となっているセクションに集中できます。「デバッガ開始オプションの設定方法」を参照してください。
デバッガでは、プログラムの実行を次の方法で制御できます。
-
メソッドのトレース実行
-
メソッドのステップ実行
-
トレースするクラスの制御
-
スレッドの実行ポイントの検索
-
カーソル位置まで実行
-
デバッガの一時停止および再開
-
デバッグ・セッションの終了
「トレース実行」コマンドおよび「ステップ実行」コマンドを使用すると、プログラム・コードを簡単に移動できます。2つのコマンドはよく似ていますが、コード実行の制御方法は異なります。
プログラムの実行単位は、最小で1コード行ずつ増やすことができます。1行に複数のプログラム文がある場合、1コード行として処理されます。1行に含まれる複数の文を個別にデバッグすることはできません。1行を1文で構成すると、最も簡単です。この方法を使用するとコードがわかりやすくなり、管理も容易です。
メソッドのトレース実行方法
トレース可能なクラスのメソッドに達するまでデバッグ対象のプログラムが実行されるように、「トレース実行」コマンドを使用してトレース実行で開始するようデバッガを設定します。リストされたいずれかのメソッドを使用して、メソッドをトレース実行します。
「トレース実行」コマンドでは、1回に1つずつプログラム文が実行されます。実行ポイントがメソッドのコール上にあるときに「トレース実行」コマンドを選択すると、そのメソッドがトレース実行され、実行ポイントはメソッドの最初の文上に置かれます。
「トレース実行」アクションは、複数のメソッドを含む行上で呼び出されたときはいつでも、行上のメソッドを強調表示します。現在の実行ポイントによって、デバッガがトレース実行の対象とするコード行が決定します。矢印キーまたはタブ・キーを使用してカーソルを移動すると、メソッドの実行ポイントがトレース実行に変更されます。
この機能は、選択された外部メソッドがインタフェースに属していて、実際にコールされるメソッドの実装場所が事前に判明していない場合に特に役立ちます。
実行ポイントがメソッドの最後の文上にあるときに「トレース実行」を選択すると、デバッガはそのメソッドから戻り、実行ポイントはそのメソッドのコールに続くコード行上に置かれます。
シングル・ステップ実行とは、「トレース実行」を使用して、プログラム・コードの文を連続して実行することを指します。
次のいずれかの方法で、メソッドをトレース実行できます。
-
「実行」→「トレース実行」を選択します。
-
[F7]キーを押します。
-
ツールバーの「トレース実行」ボタンをクリックします。
図12-3 「トレース実行」ボタン
ノート:
「トレース実行」は、すでに開始されているデバッグ・プロセスでのみ機能します。
デバッガをトレース実行で開始するように設定すると、デバッガによって、デバッグ対象のプログラムがトレース可能なクラスのメソッドに達するまで実行されます。
デバッグ時は、一部のメソッドをトレース実行し、他のメソッドをステップ実行できます。メソッドが正常に機能し、メソッドのコールによってエラーが発生しないことがわかっている場合は、そのメソッドのコールをステップ実行します。メソッドが正常に機能するかどうかわからない場合は、メソッドをトレース実行し、正常に機能するかどうかをチェックします。
メソッドのステップ実行方法
トレース可能なクラスのメソッドに達するまでデバッグ対象のプログラムが実行され、class static initializer
メソッドでは停止しないように、「ステップ実行」コマンドを使用して開始するようデバッガを設定します。リストされたいずれかのメソッドを使用して、メソッドをステップ実行します。
「ステップ実行」コマンドでは、「トレース実行」コマンドと同様、1回に1つずつプログラム文を実行できます。ただし、実行ポイントがメソッド・コール上にあるときに「ステップ実行」コマンドを発行すると、そのメソッドは停止せずに実行され(トレース実行されません)、実行ポイントはそのメソッド・コールに続く文上に置かれます。
実行ポイントがメソッドの最後の文上にあるときに「ステップ実行」を選択すると、デバッガはそのメソッドから戻り、実行ポイントはそのメソッドのコールに続くコード行上に置かれます。
次のいずれかの方法で、メソッドをトレース実行できます。
-
「実行」→「ステップ実行」を選択します。
-
[F8]キーを押します。
-
ツールバーの「ステップ実行」ボタンをクリックします。
図12-4 「ステップ実行」ボタン
以前のリリースのJDeveloperとは異なり、「ステップ実行」ボタンをクリックしてデバッグを開始することはできません。「ステップ実行」は、すでに開始されているデバッグ・プロセスでのみ機能します。
ステップ実行で開始するように設定した場合、デバッガによって、トレース可能なクラスのメソッドに達するまでデバッグ対象のプログラムが実行されますが、クラスのstaticイニシャライザ・メソッドでは停止しません。
デバッグ時は、一部のメソッドをトレース実行し、他のメソッドをステップ実行できます。メソッドが正常に機能し、メソッドのコールによってエラーが発生しないことがわかっている場合は、そのメソッドのコールをステップ実行します。メソッドが正常に機能するかどうかわからない場合は、メソッドをトレース実行し、正常に機能するかどうかをチェックします。
トレースするクラスの制御
デバッグの前に、「プロジェクト・プロパティ」または「クラス」でトレースの対象リストと対象外リストを設定します。指定したパッケージ内の下部クラスは、対象または対象外になります。
通常、デバッグを開始する前に、プロジェクト・プロパティでトレースの対象リストと対象外リストを設定する必要があります。ただし、トレースの対象リストと対象外リストを変更する必要がある場合は、クラス・ウィンドウから変更できます。クラス・ウィンドウを右クリックし、ポップアップ・メニューから「トレース中」を選択します。「トレース」ダイアログが表示され、トレースの対象リストと対象外リストを修正できます。
パッケージをトレースの対象または対象外として指定すると、そのパッケージ内の下部クラスも、個別に指定した場合を除いてトレースの対象または対象外となります。
プログラムの一部を詳しく調べるために、デバッガでステップ実行するファイルに対してのみトレースを有効にすることができます。たとえば、通常J2SEライブラリ内のクラスのトラブルシューティングは行わないので、これらをトレースする必要はありません。通常は独自に作成したクラスのみトレースします。
トレース・リストに基づく動作のステップ実行方法
クラスまたはパッケージを対象外とした場合、クラスをステップ実行するように設定したデバッガは一時停止することなくそのコードを通過します。トレースの対象または対象外リストを調整する手順を使用してください。
クラスまたはパッケージを対象外とした場合、そのクラスをステップ実行するように指定しても、デバッガは一時休止することなくそのコードを通過します。デバッガは、対象となっているクラスの次のコード行で一時休止します。トレースの対象リストおよび対象外リストは、「トレース実行」、「ステップ実行」、「ステップ・アウト」を含むすべてのステップ・コマンドで使用されます。これらのリストを使用する場合も、対象外のクラスにブレークポイントを設定できます。デバッガがそのようなブレークポイントで停止しても、ステップ・コマンドは無効です。クラスのトレースを有効にするには、次の方法でクラスまたはパッケージを対象または対象外に指定して、トレースの対象リストまたは対象外リストを修正します。
トレーシングの対象または対象外リストを調整するには:
対象リストを空にすると、対象外リストで個別に指定したパッケージを除くすべてのパッケージをトレースするように指定されます。次に例を示します。
include: exclude:java;javax
スレッドの実行ポイントの検索方法
デバッグ・プロセス中は、スレッドの現在の実行ポイントのコード行がハイライト表示されて、ソース・エディタの左マージンに実行ポイントのアイコンが表示されます。現在の実行ポイントを検索する手順を使用してください。
デバッグ中は、現在のスレッドで現在実行ポイントとなっているコード行がハイライト表示され、ソース・エディタの左マージンに実行ポイント・アイコンが表示されます。
実行ポイントは、デバッガによって実行される次のソース・コード行を示します。
現在の実行ポイントを検索するには:
カーソル位置までの実行方法
シングル・ステップ実行やブレークポイント設定をすることなく、デバッガでアプリケーション・コードを特定の場所までステップ実行します。プログラムの特定の場所まで実行する手順を使用してください。
デバッガでアプリケーション・コードをステップ実行する場合、特定の場所まではシングル・ステップ実行やブレークポイント設定をすることなく実行した方がよい場合があります。
プログラムの特定の場所まで実行するには:
次のいずれかの状態になります。
-
カーソルまで実行する場合、プログラムは、ソース・エディタでテキスト・カーソルが置かれた場所に達するまで停止することなく実行されます。
-
テキスト・カーソルが置かれているコード行が実際には実行されない場合、「カーソルまで実行」コマンドを選択すると、プログラムはブレークポイントに達するまで、またはプログラムが終了するまで実行されます。
デバッガの一時停止および再開方法
デバッガでその部分のコードを評価できるようにプログラム内のあるポイントでデバッガの実行を一時停止して、その後デバッグを再開します。「実行」の「一時停止」オプションを使用するか、またはデバッガ・ツールバーの「一時停止」を使用してデバッガを一時停止します。
デバッガでプログラムを実行中、プログラムを一時休止できます。その後、デバッガを使用して、プログラムのこの部分に関して状態を確認できます。プログラムの該当部分の確認を終了すると、プログラムの実行を継続できます。
デバッガの使用中、プログラムは実行中またはデバッガによって一時休止中のどちらかの状態になります。プログラムがユーザー入力を待機している場合は、実行中とみなされます。プログラムが実行中の場合、「一時休止」を使用できます。プログラムがデバッガによって一時停止中の場合、「再開」、「ステップ実行」、「トレース実行」を含むデバッガ・ボタンを使用できます。
デバッガは次の方法で一時停止できます。
-
メイン・メニューから「実行」→「プログラムの停止」を選択します。
-
デバッガのツールバーから「プログラムの停止」アイコンをクリックします。
図12-5 「一時停止」アイコン
プログラムは、ソースを使用できない場所で一時休止することがあります。この場合、ソース・ファイルが見つかりませんダイアログが表示され、ソース・ファイルの場所、またはスタブ・ファイルを生成するかどうかを指定するよう求められます。
また、クラスがトレースの対象外リストに含まれているためにトレースが無効な場所でプログラムが一時休止することがあります。たとえば、java.lang.Object.wait
メソッドで一時停止するような場合があります。
デバッガの一時休止中に、ガベージ・コレクションを強制的に実行できます。ガベージ・コレクションの結果は、ただちに「クラス」ウィンドウおよび「ヒープ」ウィンドウに反映されます。これにより、アプリケーションのメモリー・リークを検出できます。
一時停止したデバッガを再開するには、「実行」→「再開」を選択します。
デバッグ・セッションの終了方法
デバッガが不具合のある箇所を通過してしまった場合は「実行」メニューの「終了」を使用してデバッグ・セッションを終了し、再起動する必要があります。セッションを終了するとすべてのデバッガ・ウィンドウが閉じます。設定したブレークポイントや監視は削除されません。
場合によりデバッグ中に、プログラムを最初から再起動する必要があります。たとえば、不具合のある箇所を通過してしまった場合、プログラムを再起動します。
現在のデバッグ・セッションを終了するには:
-
「実行」→「終了 - <target>」メニュー・オプションを選択します。または、
-
デバッガのツールバーで「終了」をクリックします。
デバッグ・セッションを終了すると、すべてのデバッガ・ウィンドウが閉じます。ただし、この処理によって、設定したブレークポイントや監視式が削除されることはありません。このため、デバッグ・セッションを簡単に再開できます。
デバッガ・ウィンドウの使用方法
特定の用途向けのデバッグ・ウィンドウを使用して、コードの分析と問題領域の特定を行います。ウィンドウを右クリックしてポップアップ・メニューから「プリファレンス」を選択するか、またはツールの「プリファレンス」を選択することによって利用できるオプションを使用して、デバッグ情報をテキストまたはHTML出力ファイルとして保存します。
JDeveloperでは、コードの分析と問題領域の特定に役立つ、特定の用途向けのデバッグ・ウィンドウが数多く提供されます。各デバッガ・ウィンドウに表示する情報のタイプを制御できます。表示する列など、各ウィンドウで使用できるオプションを確認するには、ウィンドウを右クリックして、ポップアップ・メニューから「プリファレンス」を選択します。またはメイン・メニューから「ツール」→「プリファレンス」を選択し、「デバッガ」ノードを展開して、各デバッガ・ウィンドウの設定ページを表示することもできます。また、デバッグ情報をテキスト出力ファイルまたはHTML出力ファイルとして保存することもできます。
デバッガ・ウィンドウを開く方法
ブレークポイントを設定してデバッグ・セッションを開始し、ブレークポイントで「ウィンドウ」の「デバッガ」メニューから特定のウィンドウを選択します。必要に応じて、クラス、「ヒープ」、「データ」、「ログ」、「モニター」、「スタック」、「スマート・データ」、「スレッド」および「ウォッチ」の「デバッガ」ウィンドウを開いて使用できます。
「デバッガ」ウィンドウを開くには、ブレークポイントを設定してデバッグ・セッションを開始します。デバッガがブレークポイントで停止しているときに、「ウィンドウ」→「デバッガ」→「deubugger_window」を選択します。たとえば、「ウィンドウ」→「デバッガ」→「スレッド」を選択します。「ブレークポイント」ウィンドウにアクセスするには、デバッグ・セッションを開始します(「ウィンドウ」→「ブレークポイント」からもアクセス可能)。
表示する情報に応じて、「クラス」、「ヒープ」、「データ」、「ログ」、「モニター」、「スタック」、「スマート・データ」、「スレッド」、「ウォッチ」のいずれかの「デバッガ」ウィンドウを選択します。これらのウィンドウの使用の詳細は、次の項を参照してください。
「ブレークポイント」ウィンドウの使用方法
「ウィンドウ」メニューから「ブレークポイント」を選択してウィンドウを開くと、設定されたブレークポイントのリストが表示されます。「ブレークポイント」ウィンドウには、設定されたブレークポイントに関する情報が表示されます。
ブレークポイントの設定に関する情報は、ブレークポイント・ウィンドウで参照できます。ポップアップ・メニュー・オプションなど、「ブレークポイント」ウィンドウの詳細は、[F1]を押してください。
「ブレークポイント」ウィンドウを開いて、設定されたブレークポイントを一覧表示するには:
-
メイン・メニューから、「ウィンドウ」→「ブレークポイント」を選択します。「ブレークポイント」ウィンドウが表示されます。
「データ」ウィンドウの使用方法
「データ」ウィンドウには、プログラムの変数に関する情報が表示されます。また、メソッドにブレークポイントを設定し、「メソッドの最後まで実行」コマンドまたは「ステップ・アウト」コマンドを実行すると、非voidメソッドの現在の戻り値も表示されます。
データ・ウィンドウを使用して、プログラムの変数に関する情報を表示します。現在のコンテキストは、「スタック」ウィンドウでの選択内容により制御されます。新しいコンテキストに移動すると、データ・ウィンドウが更新され、新しいコンテキストのデータが表示されます。現在のクラスがデバッグ情報なしでコンパイルされた場合、ローカル変数を表示することはできません。デバッガによってスタック・フレームのローカル変数のメモリー位置が分析され、可能な範囲の情報が表示されます。
また、非voidメソッドでブレークポイントを設定し、「メソッドの最後まで実行」コマンドまたは「ステップ・アウト」コマンドを発行した場合、「データ」ウィンドウには非voidメソッドの現在の戻り値が表示されます。「ステップ実行」または「トレース実行」コマンドでは戻り値は表示されません。
「スマート・データ」ウィンドウの使用方法
「スマート・データ」ウィンドウには、ステップが実行されているソース・コードに関連するデータが表示されます。「スマート・データ」ページにスマート・データのオプションを設定して、「ツール」の「プリファレンス」の「デバッガ」を選択します。
現在のメソッドのすべての引数、ローカル変数およびstaticフィールドが表示されるデータ・ウィンドウとは異なり、スマート・データ・ウィンドウには、ステップ実行しているソース・コードに関連のあるデータのみ表示されます。具体的には、デバッガにより実行ポイント()付近のソース・コードが分析され、ステップ実行しているコード行で使用されている変数、フィールドおよび式が検索されます。「スレッドの実行ポイントの検索方法」を参照してください。
また、非voidメソッドでブレークポイントを設定し、「メソッドの最後まで実行」コマンドまたは「ステップ・アウト」コマンドを発行した場合、「スマート・データ」ウィンドウには非voidメソッドの現在の戻り値が表示されます。「ステップ実行」または「トレース実行」コマンドでは戻り値は表示されません。
デフォルトでは、1箇所につき1コード行のみ分析され、最大2箇所が分析されます。これらの設定は、「ツール」→「プリファレンス」→「デバッガ」→「スマート・データ」ページで調整できます。このページは、「スマート・データ」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択して表示することもできます。
「監視式」ウィンドウの使用方法
監視では、プログラムの実行に従って変化する変数または式の値を監視します。監視式の変数の値は、プログラムの更新および内容の変更を反映して変更されます。
監視式を使用すると、プログラムの実行に従って変化する、変数および式の値を監視できます。ウォッチ式を入力後、「ウォッチ」ウィンドウに式の現在の値が表示されます。プログラムの実行に伴い、プログラムがウォッチ式の変数の値を更新すると、ウォッチの値も変化します。
ウォッチは、「スタック」ウィンドウでの選択によって制御される現在のコンテキストに従って式を評価します。新しいコンテキストに移動すると、その新しいコンテキストに対して式が再評価されます。ウォッチ式内の変数が定義されていない位置に実行ポイントが移動すると、ウォッチ式全体が未定義となります。ウォッチ式が評価可能な位置に実行ポイントが戻ると、「ウォッチ」ウィンドウに再度ウォッチ式の値が表示されます。
ソース・エディタから監視を追加する方法
ソース・エディタから監視を追加する手順を使用してください。「データ」ウィンドウで選択した項目のポップアップ・メニューから「ウォッチ」を選択するか、「データ」ウィンドウから「ウォッチ」ウィンドウに項目をドロップして、監視を追加することもできます。
ソース・エディタで、式に監視を追加できます。
ソース・エディタから監視式を追加するには:
また、次の方法でウォッチを追加できます。
-
「データ」ウィンドウで項目を右クリックし、ポップアップ・メニューから「ウォッチ」を選択します。
-
データ・ウィンドウから監視式ウィンドウに変数、フィールドおよびオブジェクトをドラッグ・アンド・ドロップします。
静的フィールドの監視方法
staticフィールドを表示するには、後ろにピリオドとフィールド名を付けたクラスのフルネームを入力します。
staticフィールドを監視するには:
後ろにピリオド(.)とフィールド名を付けたクラスのフルネームを入力します。次に例を示します。
java.io.File.separator
例外ブレークポイントで停止中に現在の例外を監視するには、次のように入力します。
_throw
「インスペクタ」ウィンドウの使用方法
「インスペクタ」ウィンドウでは、変数、フィールドまたはオブジェクトを選択し、表示された「ウォッチ」ウィンドウまたは「データ」ウィンドウから情報を取得します。「インスペクタ」ウィンドウを開く手順を使用してください。
「インスペクタ」ウィンドウでは、選択した変数、フィールドまたはオブジェクトを選択し、「ウォッチ」ウィンドウまたは「データ」ウィンドウに表示される情報と同じ情報を表示できます。ポップアップ・メニュー・オプションなど、「インスペクタ」ウィンドウの詳細は、「インスペクタ」ウィンドウで[F1]を押してください。
「インスペクタ」ウィンドウは、デフォルトで浮動するという点で他のウィンドウとは多少異なり、「インスペクタ」ウィンドウの複数のインスタンスを使用できます。各「インスペクタ」ウィンドウにデータ項目が1つ含まれます。「インスペクタ」ウィンドウを別の「インスペクタ」ウィンドウにドラッグしてドッキングできます。
インスペクタ・ウィンドウを開くには:
「インスペクタ」ウィンドウが画面中央にフローティング・ウィンドウとして表示されますが、「インスペクタ」ウィンドウを他のウィンドウとともにドッキングできます。ドッキングしないようにするには、[Ctrl]キーを押しながらインスペクタ・ウィンドウを移動します。インスペクタは、「スタック」ウィンドウの現在のコンテキストに応じて式を評価します。「「スタック」ウィンドウの使用」を参照してください。
新しいコンテキストに移動すると、その新しいコンテキストに対して式が再評価されます。式の変数が定義されていない新しい場所に実行ポイントが移動すると、式全体が未定義になります。実行ポイントが式を評価できる場所に戻ると、その式の値が再度表示されます。
「ヒープ」ウィンドウの使用方法
「ヒープ」ウィンドウには、デバッグ中のプログラム内のヒープに関する情報が表示されます。このウィンドウは、プログラムのメモリー・リークの特定に役立ちます。「ヒープ」ウィンドウには、クラス・フォルダおよび参照パス・フォルダが表示されます。
ヒープ・ウィンドウには、デバッグ中のプログラム内のヒープに関する情報が表示されます。このウィンドウは、プログラムのメモリー・リークの検出に役立ちます。クラスのすべてのインスタンスとオブジェクトのガベージ・コレクションが行われなかった理由を表示できます。
「ヒープ」ウィンドウには次の2種類のフォルダが表示されます。
-
「クラス」フォルダ
クラス名、メモリーに存在するクラスのインスタンス数が表示され、展開すると、ヒープの特定のインスタンスおよびそのアドレスが一覧表示されます。
-
参照パス・フォルダ
直接または間接的に特定オブジェクトを指すすべてのルート参照が含まれます。ルート参照は、staticフィールド、スタック変数、確保済オブジェクトです。ルート参照がある場合、オブジェクトはガベージ・コレクタによって破棄されません。ルート参照を展開すると、ルート参照から指定したオブジェクトまでの参照パスが表示されます。
「ヒープ」ウィンドウを使用するには:
-
「ヒープ」ウィンドウを右クリックし、ポップアップ・メニューから「新規タイプの追加」を選択します。「クラス」ウィンドウから「ヒープ」ウィンドウに「クラス」ノードをドラッグする方法もあります。または、「クラス」ウィンドウで「クラス」ノードを右クリックし、ポップアップ・メニューから「ヒープ・ウィンドウに表示」を選択します。クラスに関する情報が「ヒープ」ウィンドウに表示されます。
「スタック」ウィンドウの使用
スタック・ウィンドウには、現在のスレッドのコール・スタックが表示されます。
スタック・ウィンドウには、現在のスレッドのコール・スタックが表示されます。スタック・ウィンドウで行をハイライト表示すると、データ・ウィンドウ、監視式ウィンドウおよびすべてのインスペクタ・ウィンドウが更新され、選択したすべてのメソッドのデータが表示されます。
「スタック」ウィンドウの使用方法
「スタック」ウィンドウでは、スタック・スレッドの行を強調表示して、「データ」ウィンドウ、「監視」ウィンドウおよび「インスペクタ」ウィンドウの値を更新することができます。
「クラス」ウィンドウの使用方法
「クラス」ウィンドウには、ロードされたクラスと、クラスのインスタンス数や必要なメモリー量などの情報が表示されます。また、ウィンドウには、ガベージ・コレクタの実行についても表示されます。
「クラス」ウィンドウには、ロードされたクラスが表示されます。また、クラスのインスタンス数、その数のインスタンスが必要とするメモリー量などの有益な情報も表示されます。Javaガベージ・コレクタを強制的に実行できるように、デバッガにはクラス・ウィンドウとともにガベージ・コレクション・ツールも含まれています。ガベージ・コレクタを実行すると、その影響がクラス・ウィンドウに即座に表示されます。デバッガでガベージ・コレクタを使用できる仮想マシンを使用している場合のみ、ガベージ・コレクタを強制的に実行できます。
表示順序の変更方法
「クラス」ウィンドウの各列のアイテムの表示順序を変更できます。
表示の昇順と降順を変更するには:
-
列の上部をクリックしてソート順を変更します。次の項目でソートできます。
-
名前
-
カウント
-
メモリー
-
ファイル
-
「パッケージを表示」チェック・ボックスが選択されている場合、デフォルトでは、クラスがツリー構造で表示され、各ブランチがパッケージを表します。アイコンおよび各クラスまたはパッケージの隣にあるエントリは、クラスがトレースに含まれているか除外されているかを示します。行番号表のないクラスの特殊なアイコン(図12-6)は、クラスが取り除かれたか曖昧なためにトレースが不可能であることを示します。
図12-6 トレース実行できないことを示すアイコン
「クラス」ウィンドウで、ポップアップ・メニューから「プリファレンス」を選択し、表示する列を次の使用可能なオプションから選択します。
-
カウント
-
メモリー
-
ファイル
「モニター」ウィンドウの使用方法
Javaは、同期メカニズムを使用して複数スレッド間でアクティビティとデータ・アクセスを調整します。モニター・ウィンドウには、アクティブなモニターのステータスおよび制御情報が表示されます。
Javaでは、同期による言語レベルでのマルチスレッドがサポートされています。同期とは、複数スレッド間でアクティビティとデータ・アクセスを調整することです。Javaが同期のサポートに使用するメカニズムはモニターです。モニター・ウィンドウには、アクティブなモニターのステータスおよび制御情報が表示されます。
デバッガがデッドロック状態になっている場合は、「モニター」ウィンドウも自動的に開きます。
「スレッド」ウィンドウの使用方法
「スレッド」ウィンドウには、プログラム内のすべてのスレッドの名前、ステータスおよびスレッド・グループが表示されます。「ツール」の「プリファレンス」で、「デバッガ」の「スレッド」を使用してウィンドウに表示する列を設定します。
「スレッド」ウィンドウには、プログラム内のすべてのスレッドおよびスレッド・グループの名前とステータスが表示されます。このウィンドウに表示される列は、「ツール」→「プリファレンス」→「デバッガ」→「スレッド」ページで、または「スレッド」ウィンドウを右クリックすると表示される「スレッド」ウィンドウのポップアップ・メニュー・オプションから「プリファレンス」を選択して有効になった列設定によって決まります。
「ステップ実行」、「トレース実行」および「次の文を設定」を含むステップ・コマンドは、現在のスレッドに適用されます。別のスレッドを選択するには、スレッドを右クリックし、ポップアップ・メニューから「スレッドの選択」を選択します。
スレッド・ウィンドウでスレッドを選択すると、スタック・ウィンドウが自動的に更新され、選択したスレッドのスタックが表示されます。
「デバッガ」ウィンドウの作業環境の設定方法
「デバッガ」ウィンドウの設定をカスタマイズできます。「デバッガ」ウィンドウの作業環境を設定する手順を使用してください。
列のサイズ変更モードや表示する他のオプションなど、デバッガ・ウィンドウの様々な設定をカスタマイズできます。
ヒント:
デバッガ(デバッグするプログラム)に接続できない場合は、接続再試行の設定値を上げてください。
デバッグ・ウィンドウの作業環境を設定するには:
ブレークポイントの管理
デバッグが必要な箇所に達するとプログラムの実行が一時停止されるように、ソース・コードにブレークポイントを設定します。JDeveloperは、ソース・ブレークポイント、例外ブレークポイント、メソッド・ブレークポイント、クラス・ブレークポイント、ファイル・ブレークポイントおよびデッドロック・ブレークポイントをサポートしています。
ブレークポイントはプログラム内のトリガーで、その箇所に達するとプログラムの実行が一時休止され、プログラム変数の一部またはすべての値を調べることができます。ソース・コードの問題が発生する可能性のある箇所にブレークポイントを設定することにより、デバッグの必要な箇所に達するまでプログラムを実行できます。プログラムの実行中にブレークポイントに達すると、プログラムは一時休止し、デバッガのソース・エディタにブレークポイントを含む行が表示されます。その後、デバッガを使用してプログラムの状態を表示できます。ブレークポイントは、プログラムの実行を開始する前やデバッグ中など、いつでも設定できます。次の図に、Javaアプリケーションのソース・ファイルにおけるブレークポイントの例を示します。
コードのコメント行、空白行、宣言およびその他実行不可能な行で設定されたブレークポイントは無効となり、デバッガでは検証されません。
JDeveloperのデバッガでは、様々なタイプのブレークポイントがサポートされています。
-
ソース・ブレークポイント
-
例外ブレークポイント
-
メソッド・ブレークポイント
-
クラス・ブレークポイント
-
ファイル・ブレークポイント
-
デッドロック・ブレークポイント
デッドロック・ブレークポイントは、デッドロックのソースの場所を特定するのが困難な場合に便利です。デッドロック・ブレークポイントが検出されると、デバッガは停止します。デッドロック・ブレークポイントは、デバッグの開始時に自動的に有効になります。
ブレークポイントの設定に関する情報は、ブレークポイント・ウィンドウで参照できます。
確認済および未確認ブレークポイントについて
デバッグ中、デバッガは、ブレークポイントがコードの実行可能な行に設定されているかどうかを確認することによってすべてのブレークポイントを確認します。確認されたことを示すアイコンが表示されます。
デバッグ中、ソース・エディタのコード行の左側でブレークポイントを設定できます。ただし、ブレークポイントを有効にするには、コードの実行可能な行に設定する必要があります。メソッドを初めて実行する前に、デバッガによりメソッドのすべての有効なブレークポイントが確認されます。コードのコメント行、空白行、宣言およびその他実行不可能な行で設定されたブレークポイントは無効となり、デバッガでは検証されません。
ブレークポイントが有効であると確認されると、ソース・エディタのマージンおよび「ブレークポイント」ウィンドウに表示されるアイコンが次の図に変化します。
図12-8 確認済の「確認済ブレークポイント」アイコン
デッドロックの理解
一般的なモニター・ブロック・サイクル・デッドロックなどのデッドロックでは、プログラム内の1つ以上のスレッドがリソースにアクセスできなくなるか、待機状態のままいつまでも処理できなくなります。デバッグするには、デバッガで「一時停止」をクリックしてプログラムを一時停止し、「モニター」ウィンドウを開きます。
デッドロックは、プログラム内の1つ以上のスレッドがリソースにアクセスできなくなるか、待機状態のままいつまでも処理できない場合に発生します。Javaでの一般的なデッドロックは、モニター・ブロック・サイクル・デッドロックです。
モニター・ブロック・サイクル・デッドロックは、複数のスレッドが、他のスレッドがすでに実行中の同期コードを実行するために待機し、処理ができなくなる場合に発生します。
次の例では、典型的なJavaの同期デッドロックを示します。
synchronized (a) { ... synchronized (b) { ... } ... }
同時に、スレッド2は次のコードを実行しています。
synchronized (b) { ... synchronized (a) { ... } ... }
スレッド2がsynchronized (b)
を実行中、スレッド1がsynchronized (a)
に入るとデッドロックが発生します。スレッド1は、スレッド2がsynchronized (b)
を終了するまでsynchronized (b)に入ることができず、スレッド2は、スレッド1がsynchronized (a)を終了するまでsynchronized (a)に入ることができません。デッドロックは「デッドリ・エンブラス」とも呼ばれます。この例ではスレッドは2つですが、スレッドの数が3、4、5などの場合にも同じ状況が発生する可能性があります。デッドロック・ブレークポイントでは、このようなタイプのデッドロックを検出できます。
1つのスレッドが特定のオブジェクトでwaitメソッドをコールし、他のスレッドがそのオブジェクトでnotifyメソッドをコールしない場合にもデッドロックが発生します。このタイプのデッドロックの最も一般的な原因はタイミングです。待機側のスレッドがwaitをコールする前に、通知側のスレッドがnotifyをコールした可能性があります。waitをコールする場合に注意が必要な点は、notifyが前に何度もコールされていたとしても、waitメソッドはnotifyがもう1度コールされるまで待機するという点です。また、待機しているスレッドがない場合、notifyはエラーを返しません。デッドロック・ブレークポイントでは、このタイプのデッドロックは検出できません。
プログラムがハングしている可能性がある場合は、デバッガで「プログラムの停止」をクリックしてプログラムを一時停止し、「モニター」ウィンドウを開きます。コードを調べて、待機しているスレッドを見つけます。最初のスレッドがwaitをコールする前に別のスレッドがnotifyをコールしている場合はデッドロックが発生しています。このタイプのデッドロックの検出は非常に困難です。他のどのスレッドがnotifyをコールしたかを検出するには、作成したコードをよく理解しておく必要があります。
デッドロック・ブレークポイントの理解
JDeveloperを起動するとデバッガによって自動的に設定される永続デッドロック・ブレークポイントを無効にすることができます。モニター・ブロック・サイクル・デッドロックが検出されると、デバッガは実行中のプログラムを一時停止します。
JDeveloperのデバッガでは、実行を開始すると永続デッドロック・ブレークポイントが設定されます。デッドロック・ブレークポイントは、デッドロックのソースの場所を特定するのが困難な場合に便利です。デバッガは、デッドロック・ブレークポイントに達すると停止します。デバッガは、前述のモニター・ブロック・サイクル・デッドロックを検出できます。モニター・ウィンドウは、デッドロックを処理する場合に有益です。
デッドロック・ブレークポイントには、次の特徴があります。
-
JDeveloperを使用するときに自動的に作成される永続ブレークポイントです。
-
削除できませんが、無効にすることはできます。
-
モニター・ブロック・サイクル・デッドロックが検出されるとデバッガを一時休止します。モニター・ブロック・サイクル・デッドロックは、複数のスレッドが、他のスレッドがすでに実行中の同期コードを実行するために待機し、処理ができなくなる場合に発生します。
JDeveloperのデバッガでは、永続デッドロック・ブレークポイントが自動的に作成されます。このブレークポイントは、モニター・ブロック・サイクルが検出されるたびに発生します。永続ブレークポイントは削除できません。新規デッドロック・ブレークポイントの作成はできませんが、既存の永続デッドロック・ブレークポイントの編集は可能です。
デッドロック検出がサポートされていないJava Virtual Machineもあります。たとえば、HotSpot VMでは、デッドロック検出はサポートされていません。
グループ化されたブレークポイントの理解
JDeveloperは、複数のブレークポイントをセットとして使用できるグループ化されたブレークポイントをサポートしています。デバッガがプログラム停止の設定ポイントを検出したときに無効になっているブレークポイントを有効にするか、またはデバッガが例外ブレークポイントを含むブレークポイント・グループを自動的に有効にするようにソース・ブレークポイントを設定します。
ブレークポイントのグループ化によって、ブレークポイントのセットを有効にすることができます。デバッガがコードの特定の場所に達したときに、無効になっているブレークポイントまたはブレークポイントのグループを有効にするように指定できます。
たとえば、コードによってNullPointerException
が検出されるものの、コードが正しく動作しない場合があります。場合によっては、NullPointerExceptions
が予想以上に頻繁に発生してデバッガが繰り返し停止しますが、これらのNullPointerExceptions
の中に、そのコードにとって重要ではないものが含まれていることもあります。この状況は、ブレークポイント・グループを作成し、このブレークポイントをグループに追加して、デバッグ中にデバッガがこのブレークポイントで停止しないようにブレークポイント・グループを無効にすることで解決できます。
次に、問題のあるNullPointerException
がスローされる直前に実行されるコードにソース・ブレークポイントを作成できます。ソース・ブレークポイントに対して、このブレークポイントが発生したときに、例外ブレークポイントを含むブレークポイント・グループを自動的に有効にする処理を設定できます。
ブレークポイント・オプションの編集方法
「ブレークポイントの編集」ダイアログを使用して、ソース・コードに追加した後でブレークポイントのオプションを編集します。ブレークポイントのオプションを表示および変更する手順を使用してください。
JDeveloperでは、ソース・コードに追加した後でもブレークポイントのオプションを編集できます。「ブレークポイントの編集」ダイアログでは、次のことを実行できます。
-
ブレークポイント・オプションを設定します。
-
ブレークポイントを適用するスレッドの設定
-
ブレークポイントのパスの回数の設定
-
ブレークポイント・グループへのブレークポイントの挿入
-
ブレークポイントが発生した際にデバッガで実行する処理の選択
ブレークポイントのオプションを表示および変更するには:
ブレークポイントの編集
ソース・エディタに配置されているブレークポイントを右クリックして、「ブレークポイントの編集」ダイアログで有効、無効、条件などの属性を編集します。
ソース・エディタに配置されているブレークポイントを右クリックすると編集できます。次の図に示す「ブレークポイントの編集」ダイアログ・ボックスが表示され、ブレークポイントの定義を指定できます。このダイアログで、有効/無効、条件などブレークポイントの重要な属性の一部を編集できます。
ソース・エディタでブレークポイントにカーソルを重ねて、前述の図のダイアログを表示することもできます。
ソース・ブレークポイントの設定方法
ソースの実行可能なコード行に設定されたソース・ブレークポイントにより、プログラムの実行は一時停止されます。「ブレークポイント」ウィンドウを使用するか、またはコード行の横の左余白を右クリックすると表示される「ブレークポイントの設定」を使用して、ソース・ブレークポイントを設定します。
ソース・ブレークポイントは、最も一般的なタイプのブレークポイントです。これは、ソース・コードの行で設定され、該当の行に当たるとプログラム実行が停止します。
ソース・ブレークポイントを設定するには、次のいずれかを実行します。
-
ソース・エディタで、実行可能なコード行の隣の左マージンをクリックします。
-
ソース・エディタで、コード行の横の左余白を右クリックし、「ブレークポイントの設定」([F5])を選択します。
-
「ウィンドウ」→「ブレークポイント」を選択して、「ブレークポイント」ウィンドウを表示します。次に、このウィンドウの任意の場所を右クリックし、ポップアップ・メニューから「ブレークポイントの追加」を選択します。サブメニューから、ブレークポイント型として「ソース・ブレークポイント」を選択し、ダイアログにパッケージ、ソース・ファイル名、行番号情報を入力します。ソース・ファイル名には、ディレクトリ情報は指定しませんが、ファイルの拡張子を指定する必要があります。たとえば、次のように指定します。次に例を示します。
Application1.java or MyWebApp.jsp
デバッグを開始する前に少なくとも1つのブレークポイントを設定しますが、この作業は必須ではありません。デバッガでプログラムを実行中に、ブレークポイントを設定できます。ブレークポイントに達すると、プログラムは一時休止します。
ブレークポイントの動作の制御方法
実行の停止、ビープ音を設定したり、ブレークポイントのグループを有効または無効にすることによって、ブレークポイントでのデバッガの機能を管理します。ブレークポイントが発生した場合のデバッガの動作を制御する手順を使用してください。
ブレークポイントが発生した場合のデバッガの動作を制御できます。
ブレークポイントが発生した場合のデバッガの動作を制御するには:
ブレークポイントの削除方法
必要がなくなった場合、ソース・エディタまたは「ブレークポイント」ウィンドウを使用してブレークポイントを削除します。詳細オプションを使用して、ブレークポイントを削除します。
ブレークポイントでコードを確認する必要がなくなった場合は、ブレークポイントを削除できます。削除には、ソース・エディタまたは「ブレークポイント」ウィンドウを使用します。
ブレークポイントを削除するには、次のいずれかを実行します。
-
ソース・エディタの左マージンで、削除するブレークポイントをクリックします。
-
ソース・エディタの左マージンで削除するブレークポイントを右クリックし、「ブレークポイントの設定」を選択します。
-
ソース・エディタで、そのブレークポイントが含まれているコード行にカーソルを置き、[F5]キーを押します。
-
現在設定されているブレークポイントをすべて削除するには、「ブレークポイント」ウィンドウで右クリックし、「すべて削除」を選択します。
-
「ブレークポイント」ウィンドウでブレークポイントを選択し、ツールバーで「ブレークポイントの削除」をクリックします。
注意:
削除したブレークポイントを元に戻すことはできません。
ブレークポイントの無効化方法
ブレークポイントを無効にすると、定義済のブレークポイント設定はそのままですが、プログラムの実行時にブレークポイントがトリガーされません。詳細オプションを使用して、ブレークポイントを無効にします。
ブレークポイントを無効にすると、ブレークポイント設定の定義はすべてそのままですが、プログラムの実行時にブレークポイントがトリガーされません。プログラムは無効なブレークポイントでは停止しません。現在は使用しないが、後で必要になるブレークポイントを定義した場合は、ブレークポイントを無効にすると便利です。
ブレークポイントを無効化するには、次のいずれかを実行します。
-
ソース・エディタで、左マージンにあるブレークポイント記号を右クリックし、「ブレークポイントを無効化」を選択します。
-
「ブレークポイント」ウィンドウ(「ウィンドウ」→「デバッガ」→「ブレークポイント」)で、無効にするブレークポイントを右クリックして「無効化」を選択します。
-
「ブレークポイント」ウィンドウでブレークポイントのグループを無効にするには、無効にするグループを選択し、右クリックして「グループを無効化」を選択します。
また、「ブレークポイント」ツールバーからブレークポイントを無効にすることもできます。ブレークポイントまたはブレークポイント・グループを選択し、ツールバーで「無効化」をクリックします。
-
現在のブレークポイントをすべて無効にするには、「ブレークポイント」ウィンドウで右クリックし、ポップアップ・メニューで「すべて無効化」を選択します。
ブレークポイントの有効化方法
「ブレークポイント」ウィンドウのポップアップ・メニューを右クリックすると表示される「有効化」、「すべて有効化」および「グループの有効化」オプションを使用して、無効化したブレークポイントを再有効化することができます。「ブレークポイント」ツールバーの「有効化」を使用することもできます。
無効化したブレークポイントを再有効化することができます。
無効化したブレークポイントを再有効化するには:
-
無効化したブレークポイントを有効にするには、そのブレークポイントの記号(または「ブレークポイント」ウィンドウのエントリ)を右クリックし、「有効化」を選択します。
-
設定されているすべてのブレークポイントを有効にするには、「ブレークポイント」ウィンドウを右クリックし、「すべて有効化」を選択します。
-
ブレークポイントのグループを有効にするには、「ブレークポイント」ウィンドウでブレークポイント・グループを右クリックし、「グループの有効化」を選択します。
また、「ブレークポイント」ツールバーからブレークポイントを有効にすることもできます。ブレークポイントまたはブレークポイント・グループを選択し、ツールバーで「有効化」をクリックします。
インスタンス・ブレークポイントの設定方法
「ブレークポイント」ウィンドウの「インスタンス・フィルタ」列に表示されるインスタンス・フィルタは、選択したインスタンスを識別するインスタンス・フィルタが含まれるソース・ブレークポイントです。インスタンス・ブレークポイントを設定する手順を使用してください。
通常、ブレークポイントに達すると常になんらかの影響があります。インスタンス・ブレークポイントは、ブレークポイントが表示されるメソッドを定義するクラスの特定のインスタンスに関連付けられます。
インスタンス・ブレークポイントは、選択したインスタンスを識別するインスタンス・フィルタに関連付けられているソース・ブレークポイントです。インスタンス・ブレークポイントは、デバッガの複数の実行にわたっては保持されません。インスタンス・フィルタは、「ブレークポイント」ウィンドウの「インスタンス・フィルタ」列に表示されます。
インスタンス・ブレークポイントを設定するには:
例外ブレークポイントの設定方法
プログラムの実行中に特定タイプの例外がスローされるとアクティブ化される例外ブレークポイントを設定します。例外ブレークポイントを設定する手順を使用してください。
一般に、ブレークポイントは特定のコード行に追加され、そのコード行が実行される直前にデバッガを一時休止します。また、特定タイプの例外が発生したときにアクティブになるようにブレークポイントを設定することもできます。例外ブレークポイントは、特定のコード行には関連付けられません。
例外ブレークポイントを設定するには:
これで、指定したタイプの例外がスローされるとデバッガは一時停止します。
デフォルトでは、デバッガにより、java.lang.Throwable
に未検出の例外がスローされた場合の永続例外ブレークポイントが自動的に作成されます。このブレークポイントは、未検出の例外がスローされると発生します。永続ブレークポイントは無効にできますが、削除できません。
ブレークポイントを条件付きにする方法
デバッガはブレークポイントを検出するたびにプログラムの実行を一時停止します。また、「ブレークポイントの編集」ダイアログを使用して条件を設定することによって、特定の条件でのみアクティブになるようにブレークポイントをカスタマイズできます。ブレークポイントの条件を設定する手順を使用してください。
ブレークポイントを条件付きにすると、デバッガは特定の条件が満たされた場合に一時休止します。ブレークポイントを初めて設定すると、デバッガはブレークポイントを検出するたびにプログラムの実行を一時休止します。ただし、「ブレークポイントの編集」ダイアログを使用して、特定の条件でのみアクティブになるように、ブレークポイントをカスタマイズできます。
「ブレークポイントの編集」ダイアログの「条件」タブで、プログラムの実行中にデバッガがブレークポイントを検出するたびに評価される式を入力します。式がtrueと評価された場合、プログラムはブレークポイントで一時停止します。ブレークポイント条件を評価できない場合、デバッガは、無条件ブレークポイントであるかのようにその場所で停止します。
条件付きブレークポイントのある行でデバッガが停止すると、ブレークポイント・アイコンの横にブレークポイント条件を示すゴースト・ウィンドウが表示されます。条件がtrueであったためにデバッガが停止した場合は、緑色のチェックマーク・アイコン付きで条件が表示されます。条件を評価できなかったためにデバッガが停止した場合は、疑問符アイコン付きで条件が表示されます。
たとえば、変数mediumCount
が10より大きい場合のみコード行で一時停止するブレークポイントを設定するとします。
ブレークポイントの条件を設定するには:
- ソース・エディタで行の左側をクリックして、コード行にブレークポイントを設定します。
- 「表示」→「デバッガ」→「ブレークポイント」を選択して、「ブレークポイント」ウィンドウを開きます。
- 「ブレークポイント」ウィンドウで、設定したブレークポイントを右クリックし、「編集」を選択します。
- 「ブレークポイントの編集」ダイアログで、「条件」をクリックします。
- 「条件」フィールドに、たとえば
mediumCount > 1
のように入力します。 - 「OK」をクリックします。
「ブレークポイントの編集」ダイアログには有効なJava言語式を入力できますが、ブレークポイントの場所から式に含まれるすべての記号にアクセスできる必要があります。また、式にはメソッド・コールを含めることはできません。例外ブレークポイントの場合、_throw
を使用して条件に例外オブジェクトを使用できます。
ソース・エディタに配置されているブレークポイントを右クリックして条件を設定することもできます。または、エディタ・ウィンドウの左余白にあるブレークポイント・アイコンの上にマウス・カーソルを重ねます。
パスの回数ブレークポイントの使用
「パスの回数」フィールドを使用して、ブレークポイントをアクティブにするまでにパスする必要がある回数を指定します。デフォルト値の1が設定されている場合は、プログラムがブレークポイント行に到達するとブレークポイントがアクティブになり、プログラムが一時停止します。
「パスの回数」フィールドでは、ブレークポイントをアクティブにするまでのパスの回数を指定します。パスの回数は、ループがn回目の繰返しで失敗したと考えられる場合に便利です。デバッガはプログラムの実行中にブレークポイントをn回検出するとプログラムを一時休止します。デフォルト値は1です。
ブレークポイント・ウィンドウに「パスの回数」列が表示されている場合、プログラムの実行中にコードのブレークポイント行が検出されるたびにパスの回数の値が減少することが確認できます。ブレークポイント行が検出されたときにパスの回数が1の場合、ブレークポイントがアクティブになり、プログラムはその行で一時休止します。
パスの回数をブレークポイント条件とともに使用すると、プログラムは、条件がtrueとなったn回目にブレークポイントで一時停止します。パスの回数は、条件が true
の場合のみ減少します。
「ブレークポイント」ウィンドウでブレークポイントを調べる方法
「ウィンドウ」の「デバッガ」メニューの「ブレークポイント」を選択して、ブレークポイントのリストおよびデバッガによって確認されたブレークポイントを表示します。「ブレークポイント」ウィンドウを使用して、ソース・エディタでブレークポイントを検索する手順を使用してください。
ブレークポイントのリストを表示するには、メイン・メニューから「ウィンドウ」→「デバッガ」→「ブレークポイント」を選択します。デバッガによって有効であると確認されたブレークポイントが、図12-8のようなアイコンで示されます。「ブレークポイント」ウィンドウを使用して、ソース・コード内のブレークポイントの場所を素早く検索できます。
「ブレークポイント」ウィンドウを使用して、ソース・エディタでブレークポイントを検索するには:
- 「ブレークポイント」ウィンドウで、ブレークポイントを選択します。
- 右クリックして、ポップアップ・メニューから「ソースに移動」を選択します。
ブレークポイント・グループの管理方法
ブレークポイント・グループを作成し、単一のブレークポイントと同じように有効化、無効化または削除します。
ブレークポイント・グループを作成し、ブレークポイントをこのグループに追加することにより、複数のブレークポイントを1回の処理で有効または無効にできます。ブレークポイント・グループを作成すると、このグループをブレークポイントと同じように有効化、無効化および削除できます。
ブレークポイント・グループの作成方法
ブレークポイントを作成して編集し、選択したグループのすべてのブレークポイントをまとめて有効にできるようにブレークポイント・グループを作成します。ブレークポイント・グループを作成する手順を使用してください。
ブレークポイント・グループを作成するには、まずブレークポイントを作成し、その後でブレークポイント・グループを作成するために編集します。これにより、選択したグループに含まれるすべてのブレークポイントが有効になります。ブレークポイントが有効である場合、ブレークポイントが発生すると、条件および処理が実行されます。
ブレークポイント・グループを作成するには:
ブレークポイント・グループへのブレークポイントの移動方法
ブレークポイントをブレークポイント・グループに移動する手順を使用するか、ブレークポイントをブレークポイント・グループにドラッグ・アンド・ドロップします。
ブレークポイントを移動するには、ブレークポイント・グループまでドラッグ・アンド・ドロップするか、または、次のステップを実行します。
ブレークポイント・グループにブレークポイントを移動するには:
ブレークポイント・グループの有効化、無効化、または削除
「ブレークポイント」ウィンドウで、ブレークポイント・グループを右クリックして、ポップアップ・メニューから「グループの有効化」、「グループの無効化」または「グループの削除」オプションを選択し、ブレークポイント・グループを有効化、無効化または削除します。
ブレークポイント・グループを有効化、無効化または削除するには、「ブレークポイント」ウィンドウで、ブレークポイント・グループを右クリックし、ポップアップ・メニューから「グループの有効化」、「グループを無効化」または「グループの削除」を選択します。
「ブレークポイント」ツールバーからグループを有効化または無効化することもできます。「ブレークポイント」ウィンドウでグループ名を選択し、ツールバーの「有効化」または「無効化」アイコンをクリックします。選択したグループのすべてのブレークポイントが有効化または無効化されます。
デバッガのウィンドウでプログラムの状態を確認する
プログラム変数により、不具合が表示されます。デバッガでプログラムを一時停止して、変数、引数、フィールドおよび配列項目の値を調べます。
プログラムは、ステップ実行すると表示できますが、通常はプログラム変数の値を調べて不具合を検出する必要があります。たとえば、ループをステップ実行する際に索引変数の値を確認したり、メソッド・コールで渡されるパラメータの値を確認できると便利です。プログラムがデバッガで一時休止したときに、変数、引数、フィールドおよび配列項目の値を調べることができます。
データ要素のインスペクトおよび変更方法
デバッグの実行時に、「データ」、「スマート・データ」、「インスペクタ」または「ウォッチ」ウィンドウを使用し、データ項目を表示して編集します。ソース・エディタで、プログラムがブレークポイントで一時停止したら、項目の上にマウス・ポインタを重ねると詳細が表示されます。
デバッグ・セッション中にデータ、スマート・データ、インスペクタ、監視式ウィンドウを使用して、データ項目の値をインスペクトおよび変更できます。
JDeveloperでは、「データ」ウィンドウを追加せずにデータ項目をインスペクトすることもできます。ソース・エディタで、デバッガがブレークポイントで停止したら、データ項目の上にマウス・カーソルを重ねると、名前、値、タイプが表示されます。データ項目がオブジェクトまたは配列の場合は、オブジェクト階層の下位にある、選択した項目の子もインスペクトできます。
データ・アイテムのインスペクト方法
デバッグの実行時に、異なる式でデータ項目をテストして不具合を検出します。編集でエラーを修正する場合は、プログラムを終了して、不具合を修正した後にプログラムを再コンパイルします。データ項目をインスペクトする手順を使用してください。
データ項目をインスペクトするときには、デバッグ・セッションの実行中に異なる式で評価します。プログラム・データ値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定できます。
データ項目をインスペクトするには:
変数の値の変更方法
デバッグの実行時に、不具合の仮修正をテストします。修正が適合する場合は、プログラムを終了して修正した後に再コンパイルしますが、修正ではコードが変更されないため、プログラム・ソース・コードを変更します。「データ」ウィンドウで変数の値を変更する手順を使用してください。
また、デバッグ・セッション中にプログラム・データ値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定できます。
ノート:
一部のオブジェクト・タイプは、プログラムの実行中に変更できません。このようなオブジェクト・タイプを変更しようとすると、警告が表示されます。
変数の値を変更する場合、変更はその特定のプログラム実行に対してのみ有効です。「データ」ウィンドウまたは「監視式」ウィンドウで行った変更は、プログラムのソース・コードまたはコンパイル済のプログラムには影響しません。変更を確定するには、ソース・エディタでプログラムのソース・コードを変更し、プログラムを再コンパイルする必要があります。
新しい値の型と割当先の変数の型とには互換性が必要です。割当てによってコンパイルに時間がかかったり、実行時エラーが発生したりした場合には、有効な変更値とは言えません。
データ・ウィンドウで変数の値を変更するには:
「インスペクタ」ウィンドウでの式の変更方法
「インスペクタ」ウィンドウを使用して、既存の式を変更します。「インスペクタ」ウィンドウで式を変更する手順を使用してください。
「インスペクタ」ウィンドウで、既存の式を変更できます。
インスペクタ・ウィンドウで式を変更するには:
「フィルタ対象クラス」リストでフィールドの表示/非表示を切り替える方法
データ関連のデバッガ・ウィンドウでデバッグを実行すると、展開されているオブジェクトについて表示されるフィールドの数がフィルタリングされて絞り込まれ、プログラム内の潜在的なエラーが検出され、切り離されます。フィルタリングされたクラス・リストのフィールドを表示または非表示にする手順を使用してください。
デバッグ中、フィルタを使用して、データ関連「デバッガ」ウィンドウでオブジェクトを展開するときに表示するフィールド数を減らすことができます。このタスクは、「スマート・データ」ウィンドウ、「データ」ウィンドウ、「インスペクタ」ウィンドウ、「監視式」ウィンドウ、および「モニター」ウィンドウの左側で「オブジェクト設定」ダイアログを使用して実行できます。フィールド数を減らすことにより、デバッグの対象範囲が絞られ、プログラムの問題を容易に検出して切り離すことができるようになります。
たとえば、データ・ウィンドウでクラスに対してフィルタを作成し、必要なフィールドのみを表示できます。これにより、画面が見やすくなり、関連するデータを簡単に見つけることができます。
「フィルタ対象クラス」リストでフィールドを表示または非表示にするには:
Javaプログラムのリモート・デバッグ
リモート・コンピュータ上またはVMインスタンスでコードをデバッグします。デバッグするプログラムを手動で起動し、「実行構成の編集」ダイアログの「デバッガ」-「リモート」ページで、リモート・デバッグ・プロトコルを使用してリモートでデプロイされたコードをデバッグします。
JDeveloper IDEを使用し、ローカルでコードをデバッグする他にも、リモート・マシンにあるコードや別のVMインスタンスで実行中のコードをデバッグできます。つまり、デバッガを使用して、デプロイ済のコードをデバッグすることが可能です。デバッガは、同時に複数のリモートVMにアタッチできるため、WebサーバーにデプロイされたJSPがアプリケーション・サーバーにデプロイされたEJBにアクセスするような分散アプリケーションを、シームレスにデバッグできます。
リモート・デバッグとローカル・デバッグの大きな違いは、デバッグ・セッションの開始方法にあります。ローカル・デバッグの場合、JDeveloperによってデバッグするプログラムが自動的に起動し(デバッグ対象プロセス)、デバッガがそのプログラムにアタッチされます。リモート・デバッグの場合、デバッグするプログラムを手動で起動する必要があります。また、JSPまたはサーブレットをデバッグしている場合は、JSPまたはサーブレットを起動するためのブラウザを手動で起動する必要があります。
デバッグ・プロセスが起動してJDeveloperデバッガがアタッチされた後のリモート・デバッグは、ローカル・デバッグとほとんど同じです。デバッグ対象プロセスがJDeveloperと同じマシンで動作している場合も、別のマシンで動作している場合も、リモート・デバッグを使用できます。
ローカルのデバッグとは異なり、リモート・デバッグ・セッションを開始する前に、使用するプロトコルを選択する必要があります。リモート・デバッグ・プロトコルは、「実行構成の編集」ダイアログの「デバッガ」→「リモート」ページで設定します。
「Httpアナライザ」を使用して、JSPやサーブレットなどのWebページをデバッグすることもできます。「Javaプロジェクトの監査とモニタリング」を参照してください。
-
「JPDAにアタッチ」は、指定したアドレスでデバッガ・アプリケーションにアタッチする場合に選択します。Java Platform Debugger Architecture (JPDA)接続および起動の詳細は、
http://docs.oracle.com/javase/6/docs/technotes/guides/jpda/conninv.html
を参照してください -
「JPDAのリスニング」は、デバッグ対象プロセスがデバッガにアタッチするために、デバッガでリスニングすることを指定する場合に選択します。また、リモートPL/SQLプログラムをデバッグする場合は、このオプションを選択します。
デバッグ・モードでのJavaプロセスの開始方法
デバッグ・モードでJavaプロセスを開始するには、リモート・デバッグのプロジェクトを構成して、リモート・デバッグ・セッションを開始し、デバッグ・プロトコルおよび環境に適したコマンドを実行します。
リモート・デバッグのプロジェクトを構成した後、デバッグ・プロトコルおよび環境に基づいて適切なコマンドを発行し、リモート・デバッグ・セッションを開始できます。
Javaプロセスを開始するには、コマンドラインで次のように入力します。
java [-client|server] -cp <project_directory
>\classes -agentlib:jdwp,<option1
>[=<value1
>],<option2
>[=<value2
>]... <java_main_class
>
使用可能なオプションは次のとおりです。
-
server(=n/y)
yに設定した場合、Javaプロセスはデバッガによるアタッチを待機します。n (デフォルト)に設定した場合、指定したアドレスでプロセス自体がデバッガ・アプリケーションにアタッチします。
-
address
接続用のポートを指定します。デフォルトは4000です。
-
timeout
接続試行がタイムアウトするまでの時間間隔。デフォルトは2秒です。
-
suspend =(y/n)
y(デフォルト)に設定した場合、デバッガが接続した後にJavaプロセスが実行されます。nに設定した場合、デバッグ対象プロセスはデバッガの接続を待機せずただちに開始されます。
ノート:
示されているオプションは、JDK 1.6以上を実行する場合に適用可能です。JDK 1.6より前の場合、実行しているJDKのバージョンのドキュメントを参照してください。
コマンドラインの例:
-
java -cp <project_directory>\classes -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4000
デバッガ接続をポート4000でリスニングしますが、デバッガを待機しないで実行を開始します。2秒後にタイムアウトします(デフォルト)。Client VMを実装します(デフォルト)。
-
java -server -cp<project_directory>\classes -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,timeout=3,address=8000
デバッガ接続にポート8000でアタッチします。デバッガへの接続後にのみ、実行を開始します。3秒後にタイムアウトします。Server VMを実装します。
JPDA接続および起動の詳細は、http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.html
を参照してください。
リモート・デバッグ用に設定されたプロジェクトの使用方法
プロジェクトをリモート・デバッグ用に設定する必要があります。リモート・デバッグ用にプロジェクトを設定する手順を使用してください。
任意のプロジェクトを構成して、リモート・デバッグを実行できます。
リモート・デバッグ用にプロジェクトを設定するには:
JPDAリモート・デバッグの設定方法
Java Platform Debugger Architectureを使用して、リモート・デバッグ用にJDeveloperを構成します。リモート・デバッグ用にプロジェクトを構成する手順およびリモート・デバッグ用にJDeveloperを構成する手順を使用してください。
この項では、Java Platform Debugger Architecture (JPDA)リモート・デバッグ用にJDeveloperを構成する方法について説明します。
リモート・デバッグ用にプロジェクトを設定するには:
-
global-web-application.xmlのJSPの部分を次のように変更します。
<init-param> <param-name>debug</param-name> <param-value>class</param-value> </init-param>
-
統合WebLogic Serverのコマンドを開始します(-serverが最初のパラメータであることを確認してください)。
value="-server -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4000 -Xms512m -Xmx750m -XX:PermSize=128m -XX:MaxPermSize=256m -Djava.security.policy=$ORACLE_HOME/j2ee/home/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false"/>
リモート・デバッグ用にJDeveloperを設定するには:
- 「アプリケーション」→「プロジェクト・プロパティ」、「実行/デバッグ/プロファイル」ノードを選択し、実行構成を選択して「編集」をクリックします。
- 「リモートのデバッグおよびプロファイル」チェック・ボックスを選択します。
- 「デバッガ」→「リモート」ページで、「プロトコル」が「JPDAにアタッチ」に設定されていることを確認します。
- 「プリファレンス」ダイアログを閉じます。
- コードにブレークポイントを設定して、「デバッグ」ボタン・ドロップダウン・リストから必要な実行構成を選択します。「接続」ダイアログへの入力を完了し、デバッグ対象プロセスへの接続を確認します。
- ブラウザを使用して、サーバーにすでにデプロイされているJSPにアクセスします。ブレークポイントが検出され、すべて予想どおりに動作します。