この章では、JDeveloperで提供されるツールや機能を使用して、Javaプログラムを実行およびデバッグする方法について説明します。デバッグとは、プログラム内のエラーを検出して修正するプロセスです。JDeveloperに統合されているデバッガでは、Javaアプリケーション、アプレット、サーブレット、JavaServer Pages (JSP)およびEnterprise JavaBeans (EJB)をデバッグできます。JDeveloperでは分散デバッグがサポートされているため、同一のマシンまたは別のマシンにある1つまたは複数のオブジェクトをデバッグできます。
JDeveloperでは、コード内の問題のある領域を特定できる複数のデバッグ・ウィンドウ(たとえば、ブレークポイント、ヒープ、スタックなど)が用意されています。さらに、様々なJDeveloperのデバッガおよびランナー・アイコンがJDeveloperユーザー・インタフェースの様々な領域で使用可能であり、これらについて説明します。
この章には次の項が含まれます:
JDeveloperには、Javaプログラムの実行方法を監視および制御するいくつかの方法があります。Javaプログラムを実行するとき、JDeveloperは実行、デバッグおよびプロファイリングされるプロセスを常時追跡します。また、JDeveloperでは、Java、JSPおよびサーブレット・ソース・ファイルのリモート・デバッグとローカル・デバッグを提供しています。
JDeveloperでは、ローカルおよびリモートの2種類のデバッグをサポートしています。ローカル・デバッグ・セッションを開始するには、ソース・ファイルにブレークポイントを設定し、デバッガを開始します。リモート・デバッグでは、2つのJDeveloperプロセスが必要です。1つはデバッガ・プロセス、もう1つはデバッグ対象プロセスです。デバッグ対象プロセスは異なるプラットフォームに存在している場合があります。デバッグ対象プロセスが開始し、デバッガ・プロセスがそのデバッグ対象プロセスにアタッチされた後は、リモート・デバッグとローカル・デバッグの動作は似ています。
「プロセス」ウィンドウは、実行、デバッグ、プロファイリングが行われるプロセスを追跡します。このような複数のプロセスが同時にアクティブになっている場合、「プロセス」ウィンドウが自動的に表示されます。プロセスが完了すると、そのプロセスは「プロセス」ウィンドウから自動的に削除されます。
「プロセス」ウィンドウを開くには、メイン・メニューから「ウィンドウ」→「プロセス」を選択します。
「プロセス」ウィンドウでプロセスを終了するには、「プロセス」ウィンドウ内を右クリックして、ポップアップ・メニューから「終了」をクリックします。
「実行ログ」を表示するには、「プロセス」ウィンドウでプロセスを右クリックして、ポップアップ・メニューから「ログの表示」を選択します。
ターゲット、起動オプション、およびデバッガ、ロガー、プロファイラの動作など、プログラムの実行方法を制御する設定が実行構成にまとめられます。
プロジェクトには、プロジェクトの特定のファセットや開発プロセスのフェーズ用に設定された実行構成が複数含まれています。実行構成をプロジェクトにバインドし、プロジェクトで作業するすべてのユーザーに使用可能とするか、ユーザー固有のカスタム構成とすることができます。
注意: JDeveloperから実行されるJavaプログラム(たとえば、Oracle ADFモデル・テスターなど)は、JDeveloper IDEのJavaオプションを継承していません。したがって、通常は、実行構成で使用する実行/デバッグのJavaオプションを設定する必要があります。 |
新規プロジェクトごとにデフォルトの実行構成が作成されます。実行構成、または作成したその他の構成を選択して、選択したプロジェクトを実行することができます。
実行構成を選択する手順は次のとおりです。
メイン・メニューから「アプリケーション」→「プロジェクト・プロパティ」を選択します。
「実行/デバッグ」を選択します。
注意: 以前に「実行/デバッグ/プロファイル」ページにアクセスしたことがない場合は、「起動」というボタンが表示されます。このボタンをクリックして、「実行/デバッグ/プロファイル」ページにアクセスします。 |
「実行構成」リストで、実行構成を選択します。
新しい実行構成を作成するには、既存のもの(たとえば、Default)をコピーします。その後で、新しい構成用に設定を変更します。
実行構成を作成するには、次のようにします。
第14.3.1項「実行構成の選択方法」で説明するように、実行構成を選択します。
「新規」をクリックします。
「名前」ボックスで、新しい実行構成の名前を入力します。
「設定のコピー元」ドロップダウン・ボックスで、コピー元の既存の実行構成を選択します。
コピー元と同じ設定で新しい実行構成を作成するには、「OK」をクリックします。
新しい実行構成を異なる設定で作成するには、新しい設定を選択して、「OK」をクリックします。
プロジェクトまたはファイルのコンパイルが終了したら、それを実行できます。プロジェクトまたはファイルのビルドの詳細は、第12章「Javaプロジェクトのビルド」を参照してください。実行中に発生する可能性のある警告またはエラー・メッセージがログ・ウィンドウに表示されます。
プロジェクトまたはファイルを実行するには、次の手順に従います。
「アプリケーション」ウィンドウで、実行する必要のあるプロジェクトまたはファイルを選択します。
次のいずれかの方法でアプリケーションを実行します。
プロジェクトの場合のみ、メイン・メニューから「実行」→「実行」→「<target>」を選択します。
右クリックして、ポップアップ・メニューから「実行」を選択します。
ツールバーの「実行」アイコンをクリックします。
[F11]キーを押します。
Javaアプリケーションのメイン・メソッドが起動します。
オペレーティング・システムのコマンドラインからプロジェクトを実行する手順は次のとおりです。
プロジェクトはスタンドアロン実行可能プロジェクトである必要があります。
アプリケーションのmain()
メソッドを含むクラス・ファイルを選択すること
アプリケーションを起動するには、次のように入力します。
次のように入力します。
java -cp <jdev_install>\jdeveloper\jdev\mywork\Workspace1\Project1\classes package1.Application1
コマンドラインから実行可能JARファイルを起動するには、次のように入力します。
次のように入力します。
java -jar <application>.jar
ここで、<application>
は使用しているJARファイルの名前です。
オペレーティング・システムの要件によって、開発対象のJava Virtual Machine (VM)を変更する必要がある場合があります。たとえば、クライアント側アプリケーションの場合は、HotSpot Client VMを使用し、長時間実行のサーバー・アプリケーションを実行するにはServer VMを使用します。
Java Virtual Machineを変更するには、次のようにします。
「アプリケーション」ウィンドウでプロジェクトを右クリックし、コンテキスト・メニューから「プロジェクト・プロパティ」を選択します。
「実行/デバッグ/プロファイル」ページを開きます。
実行構成を選択し、「編集」をクリックします。
「実行構成の編集」ダイアログが表示されます。
「起動設定」ページの「仮想マシン」リスト・ボックスで、使用可能なオプションを選択します。
プロジェクトの実行およびデバッグに、選択したJVMが使用されます。
詳細は、「ヘルプ」をクリックしてください。
コマンドラインから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
環境変数を設定する方法を選択できます。
Java2 Standard Edition (J2SE)にはjava.exe
ファイルが含まれています。これは開発ツールとして使用するためのファイルで、Javaプログラムとともに配布するためのライセンスは供与されていません。コマンド・プロンプト画面からJavaアプリケーションをテストする際に使用します。
コマンド・プロンプト画面からJavaアプリケーションを実行するには、プログラムの実行に必要なすべてのクラスが含まれるように、システム環境変数CLASSPATH
を定義する必要があります。これには、プログラムで使用される、JDeveloperによって提供されるすべてのライブラリ・クラスが含まれます。
JDeveloperには、Javaプログラムの生成に役立つ数百のライブラリ・クラスが付属しています。クラスは、J2SE、サード・パーティの開発者、およびオラクル社から提供されます。各ライブラリは、アップグレードを容易に行うために個別に管理されます。このため、JDeveloperで作成するプログラムをコマンド・プロンプト画面から実行するには、クラスパスに多数のアーカイブ・ファイルを含める必要があります。
プロジェクトで使用される各ライブラリへのパスのみをリストに含めることをお薦めします。プロジェクトで使用されないパスをリストに含めた場合でもプログラムは起動しますが、パフォーマンス上の理由から、不要なライブラリはすべて排除してください。
注意: パスの1つにスペースが含まれる場合でも、クラスパスに引用符を使用しないでください。 |
出力パスにデフォルトのディレクトリを使用した場合、クラスパスに次のディレクトリを追加し、java.exeを使用してJavaアプリケーションをテストできます。
C:\<jdev_install>\jdeveloper\jdev\mywork\Workspace1\Project1\classes
この変数を設定することで、java.exe
を使用して、出力ディレクトリmywork
からアプリケーションを実行できます。
Javaプログラムを他のディレクトリにデプロイした場合、アプリケーション・パッケージの親ディレクトリへのパスを追加する必要があります。
CLASSPATH
変数は長い文字列であるため、入力を誤る可能性があります。CLASSPATH
をシステム環境変数として設定すると、入力時間と入力ミスを減らすことができます。
JDeveloperでは、アプレット・ビューアまたは統合WebLogic Serverインスタンスでアプレットを実行できます。アプレット・ビューアを使用すると、Webブラウザを起動せずにアプレットを実行できます。ブラウザでアプレットを実行する場合は、統合WebLogic Serverインスタンスで実行できます。
アプレットを作成し、HTMLファイルでクラスパスが正しく設定されていることを確認した後、「実行」コマンドを実行して、アプレットを実行できます。
アプレットを実行する手順は次のとおりです。
「アプリケーション」ウィンドウで、<APPLET>
タグが含まれているHTMLファイルを選択します。
HTMLファイルを右クリックして、「実行」を選択します。
ダイアログで、ターゲット・アプレットを起動する方法を選択し、「OK」をクリックします。
アプレット・ビューア内: アプレット・ビューアからアプレットが起動されます。
サーバー・インスタンス内: 統合サーバーが起動し、アプレットがサーバーで実行されます。
アプレットはHTMLページで実行され、このページから表示サイズおよびその他のパラメータを取得します。アプレットをJDeveloperで実行するには、適切な<APPLET>
タグを含むHTMLファイルを指定する必要があります。
大文字と小文字は、パラメータ・タグでは区別されませんが、パラメータ名では区別されます。
<APPLET CODE="foo.class" WIDTH=200 HEIGHT=20> </APPLET>
<APPLET>
タグと</APPLET>
タグの間に次のような<PARAM>
タグを挿入して、パラメータをアプレットに渡すこともできます。
<PARAM NAME=foo VALUE=true>
例14-1に、パラメータを渡す際に使用するHTMLフラグメントを示します。
例14-1 パラメータを渡す際に使用するHTMLフラグメント
<H1>Test File</H1> <HR> <APPLET CODE="Test3.class" WIDTH=500 HEIGHT=120> <PARAM NAME=level VALUE="8"> <PARAM NAME=angle VALUE="45"> <PARAM NAME=delay VALUE="1000"> <PARAM NAME=axiom VALUE="F"> <PARAM NAME=incremental VALUE="true"> <PARAM NAME=incremental VALUE="true"> </APPLET> <HR> <A HREF="Test3.java">The source</A> ...
アプレットを実行する場合、ブラウザによって、ホストの*.html
ファイルの<APPLET>
タグにARCHIVE
およびCODEBASE
パラメータで指定するCLASSPATH
が提供されます。
CODEBASE
パラメータでは、インターネット・ブラウザがクラス・ファイルを検索するルート・ディレクトリを設定します。クラスがアプレットをコールするHTMLページと同じディレクトリに格納されている場合、CODEBASE
パラメータを省略できます。異なるディレクトリに格納されている場合は、HTMLファイルからCODEBASE
ディレクトリの場所までの絶対パスまたは相対パスを使用します。ディレクトリを示す場合、円記号(\)ではなくフォワード・スラッシュ(/)を使用します。
ARCHIVE
パラメータでは、アプリケーションで使用するCLASSPATH
と同様、プログラムおよびプログラムをサポートするライブラリ・ファイルを含むJARファイルの場所と名前のリストを指定します。これらには3つの重要な違いがあります。
Javaアーカイブ・ファイル名は、セミコロン(;)ではなくカンマ(,)で区切られます。
Javaアーカイブ・ファイルがCODEBASE
のサブディレクトリに格納されている場合、ディレクトリを示すには、円記号(¥¥)ではなくフォワード・スラッシュ(/)を使用します。
アプレットのJavaセキュリティ・モデルに対する制約により、ARCHIVE
パラメータが参照するクラスは、CODEBASE
ディレクトリのサブディレクトリにのみ置くことができます。つまり、親ディレクトリ(./)を使用してアーカイブ・ファイルの場所を設定しようとすると、セキュリティ違反エラーが発生します。
デバッガにより、コードを調べて問題のある領域を特定し修正するための多くの機能が提供されます。コードの分析には、ローカルとリモートの2種類のデバッグが可能です。
ローカル・デバッグ・セッションを開始するには、ソース・ファイルにブレークポイントを設定し、デバッガを開始します。JDeveloperでサーブレットなどのアプリケーションをデバッグする際は、実行フローを完全に制御して、変数の値を表示および変更できます。また、クラス・インスタンスのカウント数とメモリー使用量を監視することによって、アプリケーションのパフォーマンスを調べることができます。JDeveloperは、アプリケーションから他のソース・ファイルへのコールに従うか、またはソース・ファイルが使用できない場合はスタブ・クラスを生成します。
リモート・デバッグでは、2つのJDeveloperプロセスが必要です。1つはデバッガ・プロセス、もう1つはデバッグ対象プロセスです。デバッグ対象プロセスは異なるプラットフォームに存在している場合があります。デバッグ対象プロセスが開始し、デバッガ・プロセスがそのデバッグ対象プロセスにアタッチされた後は、リモート・デバッグとローカル・デバッグの動作は似ています。
表14-1では、コード内で問題のある領域を効率的に特定できるようにする特殊な目的のデバッグ・ウィンドウを示しています。
表14-1 デバッグ・ウィンドウ
ウィンドウ | 説明 |
---|---|
ブレークポイント |
現在のワークスペースとプロジェクトのブレークポイントを表示します。詳細は、第14.8.1項「「ブレークポイント」ウィンドウの使用方法」を参照してください。 |
スマート・データ |
実行中のコードで使用されているデータを表示します。詳細は、第14.8.2項「「スマート・データ」ウィンドウの使用方法」を参照してください。 |
データ |
現在のコンテキストの引数とローカル変数を表示します。「プロジェクト・プロパティ」ダイアログの「コンパイラ」ページで、「完全なデバッグ情報」が選択されている必要があります。詳細は、第14.8.3項「「データ」ウィンドウの使用方法」を参照してください。 |
監視 |
フィールドまたは変数に対して作成された監視を表示します。監視式は、現在のコンテキストに応じて式を評価します。新しいコンテキストに移動すると、その新しいコンテキストに対して式が再評価されます。詳細は、第14.8.4項「「監視式」ウィンドウの使用方法」を参照してください。 |
インスペクタ |
1つのデータ項目を専用のフローティング・ウィンドウに表示します。インスペクタは、現在のコンテキストに応じて式を評価します。詳細は、第14.8.5項「「インスペクタ」ウィンドウの使用方法」を参照してください。 |
ヒープ |
デバッグ中のプログラムのヒープに関する情報を表示します。プログラムのメモリー・リークの検出に役立ちます。詳細は、第14.8.6項「「ヒープ」ウィンドウの使用方法」を参照してください。 |
スタック |
現在のスレッドのコール・スタックを表示します。詳細は、第14.8.7項「「スタック」ウィンドウの使用方法」を参照してください。 |
クラス |
各クラスの名前およびパッケージなど、アプリケーションが実行される際にロードされたクラスに関する情報を表示します。デバッガによって、各クラスのライブ・インスタンスの数、およびこれらのインスタンスで消費されるメモリーの量も表示できます。詳細は、第14.8.8項「「クラス」ウィンドウの使用方法」を参照してください。 |
モニター |
アプリケーションのアクティブなモニターに関する情報に加えて、それらのモニターにアクセスするスレッドのステータス情報も表示します。このウィンドウは、デッドロックや他のスレッドの同期化に関する問題を調べる場合に役立ちます。詳細は、第14.8.9項「「モニター」ウィンドウの使用方法」を参照してください。 |
スレッド |
スレッドおよびスレッド・グループを表示し、現在のスレッドを強調表示します。また、各スレッドの名前、ステータス、優先度およびグループを表示します。詳細は、第14.8.10項「「スレッド」ウィンドウの使用方法」を参照してください。 |
表14-2は、JDeveloperのデバッガおよびランナー・アイコンを示しています。これらのアイコンは、「デバッガ」ウィンドウおよび「ログ」ウィンドウなど、JDeveloperのユーザー・インタフェースの各領域で使用されます。
表14-2 デバッガおよびランナー・アイコン
アイコン | 名前 | 説明 |
---|---|---|
配列 |
JDeveloperのすべてのデータ関連ウィンドウの配列クラスを表します。 |
|
|
ブレークポイントの追加 |
ブレークポイントの作成に使用する「ブレークポイント」ツールバー・ボタンを表します。 |
|
「ブレークポイント」メニュー |
「表示」→「デバッガ」→「ブレークポイント」メニュー・オプション、または「ブレークポイント」ウィンドウのタブ・アイコンを表します。 |
|
クラス |
「表示」→「デバッガ」→「クラス」メニュー・オプション、「クラス」ウィンドウのタブ・アイコン、および「クラス」ウィンドウのクラスを表します(クラスのトレースが無効の場合はグレー表示)。 |
|
行番号表がない「クラス」 |
「クラス」ウィンドウに表示されます。行番号表がないクラス(曖昧なクラス)を表します。 |
|
現在の実行ポイント |
ソース・エディタのマージンに表示される現在の実行ポイントを表します。「実行」→「実行中の行を表示」メニュー・オプションを選択して表示できます。 |
|
現在のスレッド |
スレッド・ウィンドウの現在のスレッドを表します。 |
|
データ |
「表示」→「デバッガ」→「データ」メニュー・オプション、「表示」→「デバッガ」→「スマート・データ」メニュー・オプション、および「データ」ウィンドウと「スマート・データ」ウィンドウのタブ・アイコンを表します。 |
|
デバッグ([Shift]+[F9]) |
「実行」→「<project_name>のデバッグ」メニュー・オプション、「デバッグ」ツールバー・ボタン、「プロセス」ウィンドウのプロセス・フォルダに含まれるデバッグ・プロセス、デバッグ・プロセスのログ・ページ、デバッグ・レイアウト、「リモート・デバッグとプロジェクトのプロファイリング」ウィザードを表します。 |
|
デバッグ・リスナー・ノード |
「プロセス」ウィンドウでdebug listenerノードを表します。 |
|
無効なブレークポイント |
ソース・エディタのマージンおよび「ブレークポイント」ウィンドウ内の無効なブレークポイントを表します。また、このアイコンは、ブレークポイントを無効にする「ブレークポイント」ツールバー・ボタンを表します。 |
|
ブレークポイントの削除 |
ブレークポイントを削除するための「ブレークポイント」ツールバー・ボタンを表します。 |
|
ブレークポイントの編集 |
選択したブレークポイントの編集に使用できる「ブレークポイント」ツールバー・ボタンを表します。 |
|
ガベージ・コレクション |
「実行」→「ガベージ・コレクション」メニュー・オプション、およびクリック可能な「ガベージ・コレクション」ツールバー・ボタンを表します。 |
|
インタフェース |
「クラス」ウィンドウのインタフェースを表します。 |
|
ヒープ |
「表示」→「デバッガ」→「ヒープ」メニュー・オプション、および「ヒープ」ウィンドウのタブ・アイコンを表します。 |
|
「ヒープ」フォルダ |
ヒープ・ウィンドウのフォルダを表します。 |
|
方法 |
「スタック」ウィンドウのメソッドを表します。 |
|
モニター |
「表示」→「デバッガ」→「モニター」メニュー・オプション、および「モニター」ウィンドウのタブ・アイコンを表します。 |
|
オブジェクト |
JDeveloperのすべてのデータ関連ウィンドウのオブジェクトを表します。 |
|
パッケージ |
「クラス」ウィンドウのパッケージを表します(パッケージのトレースが無効な場合はグレー表示) |
|
プログラムの停止 |
「実行」→「プログラムの停止」メニュー・オプション、およびクリック可能な「プログラムの停止」ツールバー・ボタンを表します。 |
|
プリミティブ |
JDeveloperのすべてのデータ関連ウィンドウの基本項目を表します。 |
|
再開 |
「実行」→「再開」メニュー・オプション、およびクリック可能な「再開」ツールバー・ボタンを表します。 |
|
実行 |
「プロセス」ウィンドウで、実行中プロセスの場合はログ・ページで、および選択したノードを実行する場合はツールバーで、実行中のプロセスを表します。 |
|
カーソルまで実行([F4]) |
「実行」→「カーソルまで実行」メニュー・オプションを表します。指定した場所までコードを実行します。 |
|
スタック |
「表示」→「デバッガ」→「スタック」メニュー・オプション、および「スタック」ウィンドウのタブ・アイコンを表します。 |
|
スタック・フォルダ |
「データ」ウィンドウのstaticフォルダを表します。 |
|
メソッドの最後まで実行 |
「実行」→「メソッドの最後まで実行」メニュー・オプションおよびクリック可能な「メソッドの最後まで実行」ツールバー・ボタンを表します。 |
|
トレース実行([F7]) |
「実行」→「トレース実行」メニュー・オプション、およびクリック可能な「トレース実行」ツールバー・ボタンを表します。 |
|
ステップ・アウト([Shift]+[F7]) |
「実行」→「ステップ・アウト」メニュー・オプション、およびクリック可能な「ステップ・アウト」ツールバー・ボタンを表します。 |
|
ステップ実行 |
「実行」→「ステップ実行」メニュー・オプション、およびクリック可能な「ステップ実行」ツールバー・ボタンを表します。 |
|
終了 |
クリックして、アプリケーションのデバッグを停止できる終了ツールバー・ボタンを表します。 |
|
スレッド |
「表示」→「デバッガ」→「スレッド」メニュー・オプション、および「スレッド」ウィンドウのタブ・アイコンを表します。 |
|
スレッド |
「表示」→「デバッガ」→「スレッド」メニュー・オプション、および「スレッド」ウィンドウのタブ・アイコンを表します。 |
|
スレッド・グループ |
スレッド・ウィンドウのスレッド・グループを表します。 |
|
未確認ブレークポイント |
ソース・エディタのマージンおよび「ブレークポイント」ウィンドウの未確認ブレークポイントを表します。 |
|
確認済ブレークポイント |
ソース・エディタのマージンで検証済ブレークポイントを表します。 |
統合WebLogic Serverにデプロイされたアプリケーションをデバッグする際、ファイルに変更を加えることができ、その変更は実行中のアプリケーションに反映されます。その際にアプリケーションを停止したり再デプロイする必要はありません。
JSFファイルの変更
変更したページを現在表示している場合は、ブラウザを保存してリフレッシュします。または、ページをまだ表示していない場合は、そのページに移動します。加えられたばかりの変更がページに反映されます。
変更を保存して再コンパイルします。変更されたコードが次に実行されるときに、アプリケーションを再起動することなく変更を確認できます。
ブレークポイントで停止したときには、次の操作を実行できます。
現在停止しているメソッドを含め、現在停止しているクラスを変更します。
エディタを右クリックして、個別のクラスを再ビルドします。
「スタック」タブを選択します(このタブは、デフォルトでは、「アプリケーション」ウィンドウで「構造」タブに分類されています)。スタックの最上部に、停止しているメソッドが廃止されたことが表示されます。
前のメソッドを右クリックして、「ここに戻る」メニュー項目を選択します。廃止されたメソッドを呼び出したコードにカーソルが再配置されます。
実行を再開すると、クラスまたはメソッドに加えられた変更が反映されます。
注意: クラスに対してプライベートなコードのみを変更できます。再コンパイル後にコンソール出力を確認します。出力により、再コンパイルされたコードが実行時に使用可能かどうかが明確になります。 |
「データ」ウィンドウで引数やローカル変数を確認するなど、デバッガ機能の一部を使用するためには、先にデバッグ情報付きでコードをコンパイルする必要があります。これによって、アプリケーションのデバッグとテスト時に時間が節約されます。
ブレークポイントを設定し、コードをステップ実行するには、次のようにします。
ソース・エディタで文の左マージンをクリックして、実行可能文にブレークポイントを設定します。詳細は、第14.9項「ブレークポイントの管理」を参照してください。
未確認のブレークポイントのアイコンが左マージンに表示されます。
「実行」→「[filename.java]のデバッグ」を選択します。
クラスが実行され、最初のブレークポイントで停止します。
ツールバーから、「トレース実行」をクリックしてメソッド・コールをトレース実行するか、「ステップ実行」をクリックしてメソッド・コールをステップ実行します。
「スタック」ウィンドウで、プログラムを現在の状態に導いた一連のメソッド・コールを調べます。
ソース・エディタに関連ソース・コードを表示するには、メソッドをダブルクリックします。
「スマート・データ」ウィンドウと「データ」ウィンドウで、引数と変数を調べます。
「スレッド」ウィンドウを表示して、プログラムの他のスレッドのステータスを調べます。
Java Hotswap機能を使用すると、デバッグ・セッション中のソースの編集および再コンパイルが可能になり、クラス・ファイル内の新しいコードがデバッガで「ホットスワップ」されます。デバッグ・セッションを明確に終了する必要はありません。デバッグ・セッションを続行でき、次回の実行で新しいコードに到達したときに、そのコードが使用されます。
JDeveloperでは、ADF宣言デバッガを使用してブレークポイントに対するデバッグを実行できます。エラーを簡単に特定できない場合は、JDeveloperでADF宣言デバッガを使用してブレークポイントを設定できます。ブレークポイントに達すると、アプリケーションの実行が一時停止され、Oracle ADFバインディング・コンテナの作業対象データを調べて、予測されるデータと比較することができます。ブレークポイントのタイプによっては、ステップ機能を使用して、1つのブレークポイントから別のブレークポイントに移動できます。
表14-3では、ADFコンポーネントのデバッグに使用できるウィンドウを示しています。
表14-3 ADFコンポーネントのデバッグ・ウィンドウ
ウィンドウ | 説明 |
---|---|
ADFデータ |
アプリケーションがブレークポイントで一時停止すると、「ADF構造」ウィンドウでの選択内容に基づいて、関連データを表示します。詳細は、第14.8.3項「「データ」ウィンドウの使用方法」を参照してください。 |
ELエバリュエータ |
デバッグ・セッション中にブレークポイントに達したときにEL式を評価します。JSFアプリケーションのみがELエバリュエータを使用できます。 |
ADF構造 |
ブレークポイントでアプリケーションが停止すると、ここにADFランタイム・オブジェクトとその関係のツリー構造を表示します。詳細は、第3.11.6項「「構造」ウィンドウ」を参照してください。 |
各デバッガ・ウィンドウに表示する情報のタイプを制御できます。表示する列など、各ウィンドウで使用できるオプションを確認するには、ウィンドウを右クリックして、ポップアップ・メニューから「設定」を選択します。またはメイン・メニューから「ツール」→「設定」を選択し、「デバッガ」ノードを展開して、各デバッガ・ウィンドウの設定ページを表示することもできます。また、デバッグ情報をテキスト出力ファイルまたはHTML出力ファイルとして保存することもできます。詳細は、第14.7.9項「デバッグ情報をファイルにエクスポートする方法」を参照してください。
JDeveloperデバッガを使用してプログラムの実行を制御するには、次のようにします。
ブレークポイントまで実行します。詳細は、第14.9項「ブレークポイントの管理」を参照してください。
ブレークポイントは、そこまで到達したときプログラムの実行が一時停止するトリガーです。これを利用して、プログラム変数の一部または全部の値を調べることができます。プログラムの実行中にブレークポイントに達すると、プログラムは一時休止し、デバッガのソース・エディタにブレークポイントを含む行が表示されます。
1つのメソッドをトレース実行したり、1つのプログラム文を一度に実行したりすることが可能です。詳細は、第14.7.15項「メソッドのトレース実行方法」を参照してください。
実行ポイントがメソッドのコール上にあるときに「トレース実行」コマンドを選択すると、そのメソッドがトレース実行され、実行ポイントはメソッドの最初の文上に置かれます。
メソッドをステップ実行します。詳細は、第14.7.16項「メソッドのステップ実行方法」を参照してください。
実行ポイントがメソッド・コール上にあるときに「ステップ実行」コマンドを発行すると、デバッガはトレース実行するかわりに、停止せずにメソッドを実行します。プログラム文は、一度に実行されます。
カーソル位置まで実行します。詳細は、第14.7.20項「カーソル位置まで実行する方法」を参照してください。
これを利用すると、シングル・ステップ実行やブレークポイントの設定を必要とせずにプログラム中の特定の場所まで進むことができます。
デバッガを一時停止して再開します。詳細は、第14.7.21項「デバッガの一時停止および再開方法」を参照してください。
デバッガでプログラムを実行中、プログラムを一時休止できます。その後、デバッガを使用して、プログラムのこの部分に関して状態を確認できます。プログラムの該当部分の確認を終了すると、プログラムの実行を継続できます。
デバッグ・セッションを終了します。詳細は、第14.7.22項「デバッグ・セッションの終了方法」を参照してください。
終了すると、プログラム値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定します。
JDeveloperでは、パッケージおよびクラスを有効または無効にしたり、リモート・デバッグ・オプションを設定するなど、プログラムのデバッグ方法を制御できます。
JDeveloperでデバッガおよびリモート・デバッガのオプションを設定するには、次のようにします。
「アプリケーション」→「デフォルト・プロジェクト・プロパティ」(すべてのプロジェクトに適用されるプリファレンスを設定するため)を選択します。
「アプリケーション」→「プロジェクト・プロパティ」(現在のプロジェクトのみに適用されるプリファレンスを設定するため)を選択します。
「実行/デバッグ」ノードを選択します。
実行構成を選択します。詳細は、第14.3項「プロジェクトを実行用に構成」を参照してください。
「編集」をクリックします。
「ツール設定」→「デバッガ」を選択します。
「デバッガ」ページおよび「リモート」ページでオプションを設定します。
終了したら、「OK」をクリックします。
デバッガ開始オプションを設定することで、新しいデバッグ・セッション開始時の、デバッガの動作を指定できます。具体的には、ブレークポイントに達するまでデバッガを実行させるか、もしくはプロジェクトのコード(たとえばアプリケーションのメイン・メソッドの先頭)に達した時点でデバッガを停止させるかを指定します。
デバッガ開始オプションを設定するには、次のようにします。
メイン・メニューから「ツール」→「設定」→「デバッガ」を選択します。
「デバッグの開始オプション」を選択します。
注意: [F7]を押して、トレース実行する必要のあるメソッドの選択を表示できます。複数のメソッドがある場合、[F7]を押すと、これらのメソッドが強調表示されます。トレース実行するメソッドをクリックできます。 行に複数のメソッド・コールがあり、必要なメソッド・コールが最初に表示されるとは限らない場合に、この機能が役立ちます。 |
デバッグの前にプロジェクトをビルドする必要があります。プロジェクトは、「プロジェクト・プロパティ」の「コンパイラ」ページで指定したオプションを使用してビルドされます。
プロジェクトをビルドしてデバッガを起動するには、次のようにします。
「アプリケーション」ウィンドウで、プロジェクトを選択します。
右クリックして、「プロジェクト・プロパティ」→「コンパイラ」を選択します。
「完全なデバッグ情報」がまだ選択されていない場合は選択します。
「OK」をクリックしてダイアログを閉じます。
デバッガを起動するには、次のいずれかの操作を行います。
現在の実行構成を使用してデバッガを開始するには、メイン・メニューから「実行」→「<target>のデバッグ」を選択します。
実行構成を選択してデバッガを起動するには、ツールバーの「デバッグ」アイコンの横のドロップダウン・メニューから必要な実行構成の名前をクリックします。
プロジェクトのビルドに成功すると、デバッガが起動します。
JDeveloperのデバッガによって生成されたデバッグ情報は、デバッガ・ウィンドウのいずれかからテキスト出力ファイルまたはHTML出力ファイルにエクスポートできます。
デバッグ情報をファイルにエクスポートするには、次のようにします。
ツールバーで「デバッグ」をクリックし、デバッグを開始します。
デバッガがブレークポイントで停止すると、エクスポートする情報が含まれているデバッガ・ウィンドウを見つけます。
デバッガ・ウィンドウで右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。
該当する「プリファレンス - デバッガ」ページの「列」の下で、「デバッガ」ウィンドウおよび出力ファイルで表示または非表示にする列を選択します。
「OK」をクリックして「プリファレンス」ダイアログを閉じます。
デバッガ・ウィンドウで右クリックし、「エクスポート」を選択します。
「エクスポート」ダイアログで、ファイルの名前を入力します。出力ファイルはテキスト・ファイルとして保存され、列の間にはタブが、行の間には改行が挿入されます。HTMLファイルにエクスポートする場合は、.html
拡張子または.htm
拡張子(大/小文字の区別なし)を追加します。
プロジェクトのビルドに成功すると、デバッガが起動します。
(ステップ・コマンド完了後のブレークポイントで、または一時停止によって)デバッガが停止すると、ソース・エディタに現在のクラスのソース・ファイルが開き、図14-1に示すように実行ポイントが付きます。
デバッグ中にクラスのソース・ファイルが見つからない場合、「ソース・ファイルが見つかりません」ダイアログが表示され、ソース・ファイルの場所の入力を求めるメッセージが表示されます。
ソース・エディタを使用して、次のデバッグを実行できます。
値を表示するために変数名の上をホバーします。
ブレークポイントを設定して、ソース・エディタの余白をクリックします。
ブレークポイントを削除し、ソース・エディタの余白でブレークポイントをクリックします。
データ・アイテム名の上にマウスを合わせると、デバッガによりソース・エディタにツールチップが表示されます。デフォルトでは、ツールチップにデータ項目の名前、値、タイプが表示され、「データ」ウィンドウまたは「監視式」ウィンドウに追加することなく、データ項目を簡単にインスペクトできます。データ項目が配列またはオブジェクトの場合は、オブジェクト階層の下位にある、選択した項目の子もインスペクトできます。ツールチップに表示される子データ項目は20個までで、残りのデータ項目を表示するにはナビゲーション・ボタンを使用してください。
このツールチップに表示される列は、「ツール」→「設定」→「デバッガ」→「ツールチップ」ページで有効にした列設定によって異なります。
プロジェクトのビルドに成功すると、デバッガが起動します。
Java式は、「監視式」ウィンドウ、「インスペクタ」ウィンドウ、ブレークポイント条件、ブレークポイント・ログ式で使用されます。デバッガで監視またはインスペクトするJava式を指定できます。式は、デバッガで評価できる有効なJava式にする必要があります。デバッガでは、表14-6に示した形式のJava式を使用できます。
表14-6 デバッガで使用できるJava式
Java式 | Form |
---|---|
単純変数名 |
|
フィールド・アクセス |
|
メソッド・コール |
|
配列要素 |
|
配列長さ |
|
比較演算 |
|
算術演算 |
|
論理演算 |
|
演算子のインスタンス |
|
シフト演算子 |
|
バイナリ演算子 |
|
疑問符とコロンを使用した演算 |
|
staticフィールド名 |
|
完全修飾クラス名 |
j |
JDeveloperのデバッガでは、プログラムの実行を制御できます。つまり、プログラムの1コード行、メソッド全体またはプログラム・ブロック全体を実行するかどうかを制御できます。プログラムの実行と一時休止のタイミングを手動で制御することにより、正常に機能していることがわかっているセクションを素早く通過し、問題の原因となっているセクションに集中できます。詳細は、第14.7.7項「デバッガ開始オプションの設定方法」を参照してください。
デバッガでは、プログラムの実行を次の方法で制御できます。
メソッドのトレース実行
メソッドのステップ実行
トレースするクラスの制御
スレッドの実行ポイントの検索
カーソル位置まで実行
デバッガの一時停止および再開
デバッグ・セッションの終了
「トレース実行」および「ステップ実行」コマンドを使用すると、プログラム・コードを簡単に移動できます。2つのコマンドはよく似ていますが、コード実行の制御方法は異なります。
プログラムの実行単位は、最小で1コード行ずつ増やすことができます。1行に複数のプログラム文がある場合、1コード行として処理されます。1行に含まれる複数の文を個別にデバッグすることはできません。1行を1文で構成すると、最も簡単です。この方法を使用するとコードがわかりやすくなり、管理も容易です。
トレース実行コマンドでは、1回に1つずつプログラム文が実行されます。実行ポイントがメソッドのコール上にあるときに「トレース実行」コマンドを選択すると、そのメソッドがトレース実行され、実行ポイントはメソッドの最初の文上に置かれます。
トレース実行アクションは、複数のメソッドを含む行上で呼び出されたときはいつでも、行上のメソッドを強調表示します。現在の実行ポイントによって、デバッガがトレース実行の対象とするコード行が決定します。カーソルを移動しても実行ポイントが変わることはなく、別のセットのメソッドがトレース実行に使用できるようになることもありません。
この機能は、選択された外部メソッドがインタフェースに属していて、実際にコールされるメソッドの実装場所が事前に判明していない場合に特に役立ちます。
実行ポイントがメソッドの最後の文上にあるときに「トレース実行」を選択すると、デバッガはそのメソッドから戻り、実行ポイント()はそのメソッドのコールに続くコード行上に置かれます。
シングル・ステップ実行という用語は、トレース実行を使用して、プログラム・コードの文を連続して実行することを指します。
次のいずれかの方法で、メソッドをトレース実行できます。
「実行」→「トレース実行」を選択します。
[F7]キーを押します。
ツールバーの「トレース実行」ボタンをクリックします。
注意: 「トレース実行」は、すでに開始されているデバッグ・プロセスでのみ機能します。 |
デバッガをトレース実行で開始するように設定すると、デバッガによって、デバッグ対象のプログラムがトレース可能なクラスのメソッドに達するまで実行されます。
デバッグ時は、一部のメソッドをトレース実行し、他のメソッドをステップ実行できます。メソッドが正常に機能し、メソッドのコールによってエラーが発生しないことがわかっている場合は、そのメソッドのコールをステップ実行します。メソッドが正常に機能するかどうかわからない場合は、メソッドをトレース実行し、正常に機能するかどうかをチェックします。
トレース実行の場合と同様に、ステップ実行コマンドでも1回に1つずつプログラム文を実行できます。ただし、実行ポイントがメソッド・コール上にあるときに「ステップ実行」コマンドを発行すると、そのメソッドは停止せずに実行され(トレース実行されません)、実行ポイントはそのメソッド・コールに続く文上に置かれます。
実行ポイントがメソッドの最後の文上にあるときに「ステップ実行」を選択すると、デバッガはそのメソッドから戻り、実行ポイントはそのメソッドのコールに続くコード行上に置かれます。
次のいずれかの方法で、メソッドをトレース実行できます。
「実行」→「ステップ実行」を選択します。
[F8]キーを押します。
ツールバーの「ステップ実行」ボタンをクリックします。
以前のリリースのJDeveloperとは異なり、「ステップ実行」ボタンをクリックしてデバッグを開始することはできません。「ステップ実行」は、すでに開始されているデバッグ・プロセスでのみ機能します。
ステップ実行で開始するように設定した場合、デバッガによって、トレース可能なクラスのメソッドに達するまでデバッグ対象のプログラムが実行されますが、クラスのstaticイニシャライザ・メソッドでは停止しません。
デバッグ時は、一部のメソッドをトレース実行し、他のメソッドをステップ実行できます。メソッドが正常に機能し、メソッドのコールによってエラーが発生しないことがわかっている場合は、そのメソッドのコールをステップ実行します。メソッドが正常に機能するかどうかわからない場合は、メソッドをトレース実行し、正常に機能するかどうかをチェックします。
通常、デバッグを開始する前に、プロジェクト・プロパティでトレースの対象リストと対象外リストを設定する必要があります。ただし、トレースの対象リストと対象外リストを変更する必要がある場合は、クラス・ウィンドウから変更できます。クラス・ウィンドウを右クリックし、ポップアップ・メニューから「トレース」を選択します。「トレース」ダイアログが表示され、トレースの対象リストと対象外リストを修正できます。
パッケージをトレースの対象または対象外として指定すると、そのパッケージ内の下部クラスも、個別に指定した場合を除いてトレースの対象または対象外となります。
プログラムの一部を詳しく調べるために、デバッガでステップ実行するファイルに対してのみトレースを有効にすることができます。たとえば、通常J2SEライブラリ内のクラスのトラブルシューティングは行わないので、これらをトレースする必要はありません。通常は独自に作成したクラスのみトレースします。
クラスまたはパッケージを対象外とした場合、そのクラスをステップ実行するように指定しても、デバッガは一時休止することなくそのコードを通過します。デバッガは、対象となっているクラスの次のコード行で一時休止します。トレースの対象リストおよび対象外リストは、「トレース実行」、「ステップ実行」、「ステップ・アウト」を含むすべてのステップ・コマンドで使用されます。これらのリストを使用する場合も、対象外のクラスにブレークポイントを設定できます。デバッガがそのようなブレークポイントで停止しても、ステップ・コマンドは無効です。クラスのトレースを有効にするには、次の方法でクラスまたはパッケージを対象または対象外に指定して、トレースの対象リストまたは対象外リストを修正します。
トレーシングの対象または対象外リストを調整する手順は次のとおりです。
「アプリケーション」ウィンドウでプロジェクトを右クリックし、コンテキスト・メニューから「プロジェクト・プロパティ」を選択します。
「実行/デバッグ」ノードを選択します。
実行構成を選択し、「編集」をクリックします。
「実行構成の編集」ダイアログで、「ツール設定」→「デバッガ」を選択します。
「対象とするクラス/パッケージのリスト」フィールドおよび「対象外のクラス/パッケージのリスト」フィールドに、対象または対象外とするパッケージやクラスの名前を適切なフィールドにセミコロン(;)で区切って入力します。次に例を示します。
oracle.xml;org.apache;org.omg;org.w3c;org.xml
また、「編集」をクリックして、「対象とするクラス/パッケージのリスト」/「対象外のクラス/パッケージのリスト」ダイアログを開き、「追加」または「削除」をクリックします。「追加」をクリックすると、「クラスおよびパッケージ・ブラウザ」ダイアログが表示されます。「削除」をクリックすると、クラスまたはパッケージが該当するトレース・リストから削除されます。追加するクラスまたはパッケージに移動し、「OK」をクリックしてください。クラスまたはパッケージが該当するトレース・リストに追加されます。
対象リストを空にすると、対象外リストで個別に指定したパッケージを除くすべてのパッケージをトレースするように指定されます。次に例を示します。
include: exclude:java;javax
デバッグ中は、現在のスレッドで現在実行ポイントとなっているコード行がハイライト表示され、ソース・エディタの左マージンに実行ポイント・アイコンが表示されます。
実行ポイントは、デバッガによって実行される次のソース・コード行を示します。
現在の実行ポイントを検索するには、次のようにします。
メイン・メニューから「実行」→「実行ポイントの検索」を選択します。
「スレッド」ウィンドウでスレッドを右クリックし、スレッドのソースに移動を選択します。
ソース・エディタに実行ポイントを含むコードのブロックが表示されます。
デバッガでアプリケーション・コードをステップ実行する場合、特定の場所まではシングル・ステップ実行やブレークポイント設定をすることなく実行した方がよい場合があります。
プログラムの特定の場所まで実行するには、次のようにします。
ソース・エディタで、デバッガを停止するコード行にテキスト・カーソルを置きます。
次のいずれかの方法で、カーソル位置まで実行します。
ソース・エディタで、右クリックして「カーソルまで実行」を選択します。
メイン・メニューから「実行」→「カーソルまで実行」オプションを選択します。
[F4]キーを押します。[F4]キーは、オペレーティング・システム(OS)でインターセプトされていないかぎり、機能します。
注意: ADCマシンまたはSLCマシンでは、[F4]キーはインターセプトされているため、デバッガに到達できません。 |
次のいずれかの状態になります。
カーソルまで実行する場合、プログラムは、ソース・エディタでテキスト・カーソルが置かれた場所に達するまで停止することなく実行されます。
テキスト・カーソルが置かれているコード行が実際には実行されない場合、「カーソル位置まで実行」コマンドを選択すると、プログラムはブレークポイントに達するまで、またはプログラムが終了するまで実行されます。
デバッガでプログラムを実行中、プログラムを一時休止できます。その後、デバッガを使用して、プログラムのこの部分に関して状態を確認できます。プログラムの該当部分の確認を終了すると、プログラムの実行を継続できます。
デバッガの使用中、プログラムは実行中またはデバッガによって一時休止中のどちらかの状態になります。プログラムがユーザー入力を待機している場合は、実行中とみなされます。プログラムが実行中の場合、「一時休止」を使用できます。プログラムがデバッガによって一時停止中の場合、「再開」、「ステップ実行」、「トレース実行」を含むデバッガ・ボタンを使用できます。
デバッガは次の方法で一時停止できます。
メイン・メニューから「実行」→「プログラムの停止」を選択します。
デバッガのツールバーから「プログラムの停止」アイコンをクリックします。
プログラムは、ソースを使用できない場所で一時休止することがあります。この場合、ソース・ファイルが見つかりませんダイアログが表示され、ソース・ファイルの場所、またはスタブ・ファイルを生成するかどうかを指定するよう求められます。
また、クラスがトレースの対象外リストに含まれているためにトレースが無効な場所でプログラムが一時休止することがあります。たとえば、java.lang.Object.wait
メソッドで一時停止するような場合があります。
デバッガの一時休止中に、ガベージ・コレクションを強制的に実行できます。ガベージ・コレクションの結果は、ただちに「クラス」ウィンドウおよび「ヒープ」ウィンドウに反映されます。これにより、アプリケーションのメモリー・リークを検出できます。
一時停止したデバッガを再開するには、「実行」→「再開」を選択します。
場合によりデバッグ中に、プログラムを最初から再起動する必要があります。たとえば、不具合のある箇所を通過してしまった場合、プログラムを再起動します。
現在のデバッグ・セッションを終了するには、次のようにします。
「実行」→「終了 - <target>」メニュー・オプションを選択します。または、
デバッガのツールバーで「終了」をクリックします。
デバッグ・セッションを終了すると、すべてのデバッガ・ウィンドウが閉じます。ただし、この処理によって、設定したブレークポイントや監視式が削除されることはありません。このため、デバッグ・セッションを簡単に再開できます。
デバッガ・ログには、デバッグ・プロセスに関する情報が表示されます。デバッガ・ログは、デバッグ対象のプロセスがアクティブである間はいつでも表示できます。
プロセスがまだアクティブな間にデバッガ・ログを表示する手順は次のとおりです。
「表示」メニューで「デバッガ」を選択し、次に「ログ」を選択します。または、
「プロセス」ウィンドウでプロセスを右クリックし、ポップアップ・メニューで「ログの表示」を選択します。
JDeveloperでは、アプレット・プログラムのデバッグ方法を制御できます。アプレットの実行方法の詳細は、第14.6項「アプレットの実行」を参照してください。
アプレットをデバッグするには、次のようにします。
「アプリケーション」ウィンドウで、<APPLET>
タグが含まれているHTMLファイルを選択します。
ツールバーの「デバッグ」をクリックします。
アプレットが起動します。デバッガは、アプレットのソース・コードで設定したブレークポイントで停止します。
JDeveloperでは、コードの分析と問題領域の特定に役立つ、特定の用途向けのデバッグ・ウィンドウが数多く提供されます。デバッガ・ウィンドウを開くには、「表示」→「デバッガ」を選択し、さらにメニューからウィンドウ(たとえば、「ブレークポイント」)を選択します。
ブレークポイントの設定に関する情報は、ブレークポイント・ウィンドウで参照できます。ポップアップ・メニュー・オプションなど、「ブレークポイント」ウィンドウの詳細は、[F1]を押してください。
「ブレークポイント」ウィンドウを開いて、設定されたブレークポイントを一覧表示する手順は次のとおりです。
メイン・メニューから「表示」→「ブレークポイント」を選択します。「ブレークポイント」ウィンドウが表示されます。
現在のメソッドのすべての引数、ローカル変数およびstaticフィールドが表示されるデータ・ウィンドウとは異なり、スマート・データ・ウィンドウには、ステップ実行しているソース・コードに関連のあるデータのみ表示されます。具体的には、デバッガにより実行ポイント()付近のソース・コードが分析され、ステップ実行しているコード行で使用されている変数、フィールドおよび式が検索されます。
詳細は、第14.7.19項「スレッドの実行ポイントの検索方法」を参照してください。
また、非voidメソッドでブレークポイントを設定し、「メソッドの最後まで実行」コマンドまたは「ステップ・アウト」コマンドを発行した場合、「スマート・データ」ウィンドウには非voidメソッドの現在の戻り値が表示されます。「ステップ実行」または「トレース実行」コマンドでは戻り値は表示されません。
デフォルトでは、1箇所につき1コード行のみ分析され、最大2箇所が分析されます。これらの設定は、「ツール」→「プリファレンス」→「デバッガ」→「スマート・データ」ページで調整できます。このページは、「スマート・データ」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択して表示することもできます。
「スマート・データ」ウィンドウを開くには、次のようにします。
ソース・エディタでブレークポイントを設定し、デバッグ・セッションを開始します。
ツールバーから「デバッグ」をクリックします。
デバッガがブレークポイントに達したときに、「表示」→「デバッガ」→「スマート・データ」を選択します。
データ・ウィンドウを使用して、プログラムの変数に関する情報を表示します。現在のコンテキストは、「スタック」ウィンドウでの選択内容により制御されます。新しいコンテキストに移動すると、データ・ウィンドウが更新され、新しいコンテキストのデータが表示されます。現在のクラスがデバッグ情報なしでコンパイルされた場合、ローカル変数を表示することはできません。デバッガによってスタック・フレームのローカル変数のメモリー位置が分析され、可能な範囲の情報が表示されます。
また、非voidメソッドでブレークポイントを設定し、「メソッドの最後まで実行」コマンドまたは「ステップ・アウト」コマンドを発行した場合、データ・ウィンドウには非voidメソッドの現在の戻り値が表示されます。「ステップ実行」または「トレース実行」コマンドでは戻り値は表示されません。
データ・ウィンドウを開くには、次のようにします。
ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。
ツールバーで「デバッグ」をクリックします。
デバッガがブレークポイントで一時停止しているときに、メイン・メニューから「ウィンドウ」→「デバッガ」→「データ」を選択します。
「データ」ウィンドウに表示するアレイの要素数を設定できます。
「データ」ウィンドウで配列要素を表示するには、次のようにします。
プロジェクトのデバッグを開始し、「データ」ウィンドウを開きます。
「データ」ウィンドウで配列を選択し、展開して配列の要素を表示します。
配列に20個を超える要素が含まれている場合、「データ」ウィンドウには最初の20個の要素が表示されます。
次の20個のエントリを表示するには、「次へ」をクリックします。
前の20個のエントリを表示するには、「前へ」をクリックします。
最初の20個のエントリを表示するには、「先頭へ」をクリックします。
最後の20個のエントリを表示するには、「最後へ」をクリックします。
デフォルトの表示制限を20から変更する場合には、配列を選択して右クリックし、ポップアップ・メニューから「範囲の調整」を選択して、「新しいカウント」フィールドに新しい値を入力します。完了したら、「OK」をクリックします。
監視式を使用すると、プログラムの実行に従って変化する、変数および式の値を監視できます。監視式を入力すると、「監視」ウィンドウに式の現在の値が表示されます。プログラムの実行時、プログラムによって監視式の変数の値が更新されるため、監視の値が変化します。
監視は、「スタック」ウィンドウでの選択内容によって制御される現行のコンテキストに従って、式を評価します。新しいコンテキストに移動すると、式は新しいコンテキストで再評価されます。監視式の変数が定義されていない場所に実行ポイントが移動すると、監視式全体が未定義になります。監視式を評価できる場所に実行ポイントが戻ると、「監視」ウィンドウに再び監視式の値が表示されます。
「監視」ウィンドウには、ソース・ファイルで設定したブレークポイントに基づく監視対象プログラムの値が表示されます。
監視式ウィンドウを開くには、次のようにします。
ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。
ツールバーから「デバッグ」をクリックします。
デバッガがブレークポイントで一時停止しているときに、メイン・メニューから「ウィンドウ」→「デバッガ」→「監視」を選択します。
監視を追加するには、複数の方法があります。
監視式を追加するには、次のようにします。
「データ」ウィンドウで項目を右クリックし、ポップアップ・メニューから「監視式」を選択します。
データ・ウィンドウから監視式ウィンドウに変数、フィールドおよびオブジェクトをドラッグ・アンド・ドロップします。
ソース・エディタでテキストを選択し、右クリックして、ポップアップ・メニューから「監視式」を選択します。
「インスペクタ」ウィンドウでは、特定の変数、フィールドまたはオブジェクトを選択し、「監視式」ウィンドウまたは「データ」ウィンドウに表示される情報と同じ情報を表示できます。ポップアップ・メニュー・オプションなど、「インスペクタ」ウィンドウの詳細は、「インスペクタ」ウィンドウで[F1]を押してください。
「インスペクタ」ウィンドウは、デフォルトで浮動するという点で他のウィンドウとは多少異なり、「インスペクタ」ウィンドウの複数のインスタンスを使用できます。各「インスペクタ」ウィンドウにデータ項目が1つ含まれます。「インスペクタ」ウィンドウを別の「インスペクタ」ウィンドウにドラッグしてドッキングできます。
インスペクタ・ウィンドウを開くには、次のようにします。
ソース・エディタで少なくとも1つのブレークポイントを設定します。
ツールバーから「デバッグ」をクリックします。
デバッガがブレークポイントに達したときは、ソース・エディタで変数を選択し、右クリックして「インスペクト」を選択します。
選択した変数を含む「インスペクト」フローティング・ウィンドウが表示されます。他の項目を調べる場合は、テキスト・フィールドに新しい式または変数を入力するか、ドロップダウン・リストから前に選択した項目を選択します。
変数または式が選択されていない場合、「インスペクト」ダイアログには、エディタ内のカーソルの下にあるテキストが、調べる式として事前に表示されます。「インスペクタ」ウィンドウを開くには、「OK」をクリックします。
「インスペクタ」ウィンドウが画面中央にフローティング・ウィンドウとして表示されますが、「インスペクタ」ウィンドウを他のウィンドウとともにドッキングできます。ドッキングしないようにするには、[Ctrl]キーを押しながら「インスペクタ」ウィンドウを移動します。インスペクタは、「スタック」ウィンドウの現在のコンテキストに応じて式を評価します。詳細は、第14.8.7項「「スタック」ウィンドウの使用方法」を参照してください。
新しいコンテキストに移動すると、その新しいコンテキストに対して式が再評価されます。式の変数が定義されていない新しい場所に実行ポイントが移動すると、式全体が未定義になります。実行ポイントが式を評価できる場所に戻ると、その式の値が再度表示されます。
ヒープ・ウィンドウには、デバッグ中のプログラム内のヒープに関する情報が表示されます。このウィンドウは、プログラムのメモリー・リークの検出に役立ちます。クラスのすべてのインスタンスとオブジェクトのガベージ・コレクションが行われなかった理由を表示できます。
「ヒープ」ウィンドウには次の2種類のフォルダが表示されます。
「クラス」フォルダ
クラス名、メモリーに存在するクラスのインスタンス数が表示され、展開すると、ヒープの特定のインスタンスおよびそのアドレスが一覧表示されます。
参照パス・フォルダ
直接または間接的に特定オブジェクトを指すすべてのルート参照が含まれます。ルート参照は、staticフィールド、スタック変数、確保済オブジェクトです。ルート参照がある場合、オブジェクトはガベージ・コレクタによって破棄されません。ルート参照を展開すると、ルート参照から指定したオブジェクトまでの参照パスが表示されます。
ヒープ・ウィンドウを開くには、次のようにします。
ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。
ツールバーで「デバッグ」をクリックします。
デバッガがブレークポイントに達したときに、メイン・メニューから「ウィンドウ」→「デバッガ」→「ヒープ」を選択します。
「ヒープ」ウィンドウを右クリックし、ポップアップ・メニューから「新規タイプの追加」を選択します。「クラス」ウィンドウから「ヒープ」ウィンドウに「クラス」ノードをドラッグする方法もあります。または、「クラス」ウィンドウで「クラス」ノードを右クリックし、ポップアップ・メニューから「ヒープ・ウィンドウに表示」を選択します。クラスに関する情報が「ヒープ」ウィンドウに表示されます。
スタック・ウィンドウには、現在のスレッドのコール・スタックが表示されます。スタック・ウィンドウで行をハイライト表示すると、データ・ウィンドウ、監視式ウィンドウおよびすべてのインスペクタ・ウィンドウが更新され、選択したすべてのメソッドのデータが表示されます。
「スタック」ウィンドウでは、スタック・スレッドの行を強調表示して、「データ」ウィンドウ、「監視」ウィンドウおよび「インスペクタ」ウィンドウの値を更新することができます。
スタック・ウィンドウを開くには、次のようにします。
ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。
ツールバーから「デバッグ」をクリックします。
デバッガがブレークポイントで一時停止しているときに、メイン・メニューから「ウィンドウ」→「デバッガ」→「スタック」を選択します。
クラス・ウィンドウには、ロードされたクラスが表示されます。また、クラスのインスタンス数などの有益な情報も表示される場合があります。Javaガベージ・コレクタを強制的に実行できるように、デバッガにはクラス・ウィンドウとともにガベージ・コレクション・ツールも含まれています。ガベージ・コレクタを実行すると、その影響がクラス・ウィンドウに即座に表示されます。デバッガでガベージ・コレクタを使用できる仮想マシンを使用している場合のみ、ガベージ・コレクタを強制的に実行できます。
クラス・ウィンドウを開くには、次のようにします。
ソース・エディタでブレークポイントを設定し、デバッグ・セッションを開始します。
デバッガがブレークポイントに達したときに、「ウィンドウ」→「デバッガ」→「クラス」を選択します。
「クラス」ウィンドウに、現在ロードされているすべてのクラス、そのクラスで使用中のインスタンス数、およびその数のインスタンスに必要なメモリー容量が表示されます。
「クラス」ウィンドウの各列のアイテムの表示順序を変更できます。
表示の昇順と降順を変更するには、次のようにします。
列の上部をクリックしてソート順を変更します。次の項目でソートできます。
名前
カウント
メモリー
ファイル
「パッケージを表示」チェック・ボックスが選択されている場合、デフォルトでは、クラスがツリー構造で表示され、各ブランチがパッケージを表します。アイコンおよび各クラスまたはパッケージの隣にあるエントリは、クラスがトレースに含まれているか除外されているかを示します。行番号表のないクラスの特殊なアイコン(図14-6)は、クラスが取り除かれたか曖昧なためにトレースが不可能であることを示します。
「クラス」ウィンドウで、ポップアップ・メニューから「設定」を選択し、表示する列を次の使用可能なオプションから選択します。
カウント
メモリー
ファイル
Javaでは、同期による言語レベルでのマルチスレッドがサポートされています。同期とは、複数スレッド間でアクティビティとデータ・アクセスを調整することです。Javaが同期のサポートに使用するメカニズムはモニターです。モニター・ウィンドウには、アクティブなモニターのステータスおよび制御情報が表示されます。
デバッガがデッドロック状態になっている場合は、「モニター」ウィンドウも自動的に開きます。
モニター・ウィンドウを開くには、次のようにします。
ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。
ツールバーで、「デバッグ」アイコンをクリックします。
デバッガがブレークポイントで停止しているときに、「ウィンドウ」→「デバッガ」→「モニター」を選択します。
「スレッド」ウィンドウには、プログラム内のすべてのスレッドおよびスレッド・グループの名前とステータスが表示されます。このウィンドウに表示される列は、「ツール」→「設定」→「デバッガ」→「スレッド」ページで、または「スレッド」ウィンドウを右クリックすると表示される「スレッド」ウィンドウのポップアップ・メニュー・オプションから「設定」を選択して有効になった列設定によって決まります。
「スレッド」ウィンドウを開くには:
ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。
ツールバーから「デバッグ」をクリックします。
デバッガがブレークポイントで停止しているときに、メイン・メニューから「ウィンドウ」→「デバッガ」→「スレッド」を選択します。
「ステップ実行」、「トレース実行」および「次の文を設定」を含むステップ・コマンドは、現在のスレッドに適用されます。別のスレッドを選択するには、スレッドを右クリックし、ポップアップ・メニューから「スレッドの選択」を選択します。
スレッド・ウィンドウでスレッドを選択すると、スタック・ウィンドウが自動的に更新され、選択したスレッドのスタックが表示されます。
列のサイズ変更モードや表示する他のオプションなど、デバッガ・ウィンドウの様々な設定をカスタマイズできます。
ヒント: デバッガをデバッグ対象プロセス(デバッグするプログラム)に接続できない場合は、接続再試行の設定値を上げてください。 |
デバッグ・ウィンドウの作業環境を設定するには、次のようにします。
「ツール」→「設定」→「デバッガ」を選択します。
デバッグ・パネルにカスタマイズ可能なフィールドが表示されます。
表示されるフィールドおよびオプションから選択します。
特定の「デバッガ」ウィンドウのオプションを設定するには、「デバッガ」ノードを展開し、該当するウィンドウ・ノードをクリックします。たとえば、スマート・データ・ウィンドウに表示する列を変更する場合は、「スマート・データ」をクリックします。
必要に応じて、設定可能なオプションを編集します。
終了したら「OK」をクリックします。
ブレークポイントはプログラム内のトリガーで、その箇所に達するとプログラムの実行が一時休止され、プログラム変数の一部またはすべての値を調べることができます。ソース・コードの問題が発生する可能性のある箇所にブレークポイントを設定することにより、デバッグの必要な箇所に達するまでプログラムを実行できます。プログラムの実行中にブレークポイントに達すると、プログラムは一時休止し、デバッガのソース・エディタにブレークポイントを含む行が表示されます。デバッガを使用してプログラムの状態を表示できます。ブレークポイントは、プログラムの実行を開始する前やデバッグ中など、いつでも設定できます。図14-7 に、Javaアプリケーションのソース・ファイルにおけるブレークポイントの例を示します。
コードのコメント行、空白行、宣言およびその他実行不可能な行で設定されたブレークポイントは無効となり、デバッガでは検証されません。
JDeveloperのデバッガでは、様々なタイプのブレークポイントがサポートされています。
ソース・ブレークポイント
例外ブレークポイント
メソッド・ブレークポイント
クラス・ブレークポイント
ファイル・ブレークポイント
デッドロック・ブレークポイント
デッドロック・ブレークポイントは、デッドロックのソースの場所を特定するのが困難な場合に便利です。デッドロック・ブレークポイントが検出されると、デバッガは停止します。デッドロック・ブレークポイントは、デバッグの開始時に自動的に有効になります。
ブレークポイントの設定に関する情報は、ブレークポイント・ウィンドウで参照できます。
デバッグ中、ソース・エディタのコード行の左側でブレークポイントを設定できます。ただし、ブレークポイントを有効にするには、コードの実行可能な行に設定する必要があります。メソッドを初めて実行する前に、デバッガによりメソッドのすべての有効なブレークポイントが確認されます。コードのコメント行、空白行、宣言およびその他実行不可能な行で設定されたブレークポイントは無効となり、デバッガでは検証されません。
ブレークポイントが有効であると確認されると、ソース・エディタのマージンおよび「ブレークポイント」ウィンドウに表示されるアイコンが図14-8に変化します。
デッドロックは、プログラム内の1つ以上のスレッドがリソースにアクセスできなくなるか、待機状態のままいつまでも処理できない場合に発生します。Javaでの一般的なデッドロックは、モニター・ブロック・サイクル・デッドロックです。
モニター・ブロック・サイクル・デッドロックは、複数のスレッドが、他のスレッドがすでに実行中の同期コードを実行するために待機し、処理ができなくなる場合に発生します。
例14-2に、典型的なJavaの同期デッドロックを示します。
同時に、スレッド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のデバッガでは、永続デッドロック・ブレークポイントが自動的に作成されます。このブレークポイントは、モニター・ブロック・サイクルが検出されるたびに発生します。永続ブレークポイントは削除できません。新規デッドロック・ブレークポイントの作成はできませんが、既存の永続デッドロック・ブレークポイントの編集は可能です。
デッドロック検出がサポートされていないJava Virtual Machineもあります。たとえば、HotSpot VMでは、デッドロック検出はサポートされていません。
ブレークポイントのグループ化によって、ブレークポイントのセットを有効にすることができます。デバッガがコードの特定の場所に達したときに、無効になっているブレークポイントまたはブレークポイントのグループを有効にするように指定できます。
たとえば、コードによってNullPointerException
が検出されるものの、コードが正しく動作しない場合があります。このとき、NullPointerException
が予想以上に頻繁に発生し、このためにデバッガが繰り返し停止しますが、これらのNullPointerException
の中にはコードにとって意味のないものが含まれているとします。この状況は、ブレークポイント・グループを作成し、このブレークポイントをグループに追加して、デバッグ中にデバッガがこのブレークポイントで停止しないようにブレークポイント・グループを無効にすることで解決できます。
次に、問題のあるNullPointerException
がスローされる直前に実行されるコードにソース・ブレークポイントを作成できます。ソース・ブレークポイントに対して、このブレークポイントが発生したときに、例外ブレークポイントを含むブレークポイント・グループを自動的に有効にする処理を設定できます。
JDeveloperでは、ソース・コードに追加した後でもブレークポイントのオプションを編集できます。「ブレークポイントの編集」ダイアログでは、次のことを実行できます。
ブレークポイント・オプションを設定します。
ブレークポイントを適用するスレッドの設定
ブレークポイントのパスの回数の設定
ブレークポイント・グループへのブレークポイントの挿入
ブレークポイントが発生した際にデバッガで実行する処理の選択
ブレークポイントのオプションを表示および編集するには、次のようにします。
「ブレークポイント」ウィンドウが開いていない場合は、メイン・メニューから「表示」→「ブレークポイント」を選択します。
「ブレークポイント」ウィンドウで、ブレークポイントを選択します。
右クリックして「編集」を選択するか、「ブレークポイント」ツールバーで「編集」アイコンをクリックします。
「定義」タブ、「条件」タブおよび「処理」タブを含む「ブレークポイントの編集」ダイアログが表示されます。
ブレークポイントのオプションに必要な変更を加えます。
変更を受け入れるには、「OK」をクリックします。
ソース・エディタに配置されているブレークポイントを右クリックすると編集できます。図14-9に示す「ブレークポイントの編集」ダイアログ・ボックスが表示され、ブレークポイントの定義を指定できます。このダイアログで、有効/無効、条件などブレークポイントの重要な属性の一部を編集できます。
ソース・エディタでブレークポイントにカーソルを重ねて、図14-9のダイアログを表示することもできます。
ソース・ブレークポイントは、ソース・コードで設定するブレークポイントで、デフォルトのブレークポイント・タイプです。
ソース・ブレークポイントを設定するには、次のいずれかを実行します。
ソース・エディタで、実行可能なコード行の隣の左マージンをクリックします。
ソース・エディタで、コード行の横の左余白を右クリックし、「ブレークポイントの設定」([F5])を選択します。
「表示」→「ブレークポイント」を選択して、「ブレークポイント」ウィンドウを開きます。次に、このウィンドウの任意の場所を右クリックし、ポップアップ・メニューから「ブレークポイントの追加」を選択します。サブメニューから、ブレークポイント型として「ソース・ブレークポイント」を選択し、ダイアログにパッケージ、ソース・ファイル名、行番号情報を入力します。ソース・ファイル名には、ディレクトリ情報は指定しませんが、ファイルの拡張子を指定する必要があります。たとえば、次のように指定します。次に例を示します。
Application1.java or MyWebApp.jsp
通常は、デバッグを開始する前に少なくとも1つのブレークポイントを設定しますが、この作業は必須ではありません。デバッガでプログラムを実行中に、ブレークポイントを設定できます。ブレークポイントに達すると、プログラムは一時休止します。
ブレークポイントが発生した場合のデバッガの動作を制御できます。
ブレークポイントが発生した場合のデバッガの動作を制御するには、次のようにします。
「ブレークポイント」ウィンドウのツールバーで、「ブレークポイントの追加」をクリックします。または、ブレークポイントを設定して「編集」をクリックします。
「新規ブレークポイント」ダイアログまたは「ブレークポイントの編集」ダイアログで「処理」タブをクリックします。「処理」タブでは、次の動作を変更できます。
実行の停止(デフォルト)
ビープ音
ブレークポイントの発生を記録(タグまたは式を入力)
ブレークポイントのグループを使用可にする
ブレークポイントのグループを使用不可にする
ブレークポイントでコードを確認する必要がなくなった場合は、ブレークポイントを削除できます。削除には、ソース・エディタまたは「ブレークポイント」ウィンドウを使用します。
ブレークポイントを削除するには、次のいずれかを実行します。
ソース・エディタの左マージンで、削除するブレークポイントをクリックします。
ソース・エディタの左マージンで削除するブレークポイントを右クリックし、「ブレークポイントの設定」を選択します。
ソース・エディタで、そのブレークポイントが含まれているコード行にカーソルを置き、[F5]キーを押します。
現在設定されているブレークポイントをすべて削除するには、「ブレークポイント」ウィンドウで右クリックし、「すべて削除」を選択します。
「ブレークポイント」ウィンドウでブレークポイントを選択し、ツールバーで「ブレークポイントの削除」をクリックします。
警告: 削除したブレークポイントを元に戻すことはできません。 |
ブレークポイントを無効にすると、ブレークポイント設定の定義はすべてそのままですが、プログラムの実行時にブレークポイントがトリガーされません。プログラムは無効なブレークポイントでは停止しません。現在は使用しないが、後で必要になるブレークポイントを定義した場合は、ブレークポイントを無効にすると便利です。
ブレークポイントを無効化するには、次のいずれかを実行します。
ソース・エディタで、左マージンにあるブレークポイント記号を右クリックし、「ブレークポイントを無効化」を選択します。
「ブレークポイント」ウィンドウ(「ウィンドウ」→「デバッガ」→「ブレークポイント」)で、無効にするブレークポイントを右クリックして「無効化」を選択します。
「ブレークポイント」ウィンドウでブレークポイントのグループを無効にするには、無効にするグループを選択し、右クリックして「グループを無効化」を選択します。
また、「ブレークポイント」ツールバーからブレークポイントを無効にすることもできます。ブレークポイントまたはブレークポイント・グループを選択し、ツールバーで「無効化」をクリックします。
現在のブレークポイントをすべて無効にするには、「ブレークポイント」ウィンドウで右クリックし、ポップアップ・メニューで「すべて無効化」を選択します。
無効化したブレークポイントを再有効化することができます。
無効化したブレークポイントを再有効化する手順は次のとおりです。
無効化したブレークポイントを有効にするには、そのブレークポイントの記号(または「ブレークポイント」ウィンドウのエントリ)を右クリックし、「有効化」を選択します。
無効化したすべてのブレークポイントを有効にするには、「ブレークポイント」ウィンドウで右クリックし、「すべて有効化」を選択します。
ブレークポイントのグループを有効にするには、「ブレークポイント」ウィンドウでブレークポイント・グループを右クリックし、「グループの有効化」を選択します。
また、「ブレークポイント」ツールバーからブレークポイントを有効にすることもできます。ブレークポイントまたはブレークポイント・グループを選択し、ツールバーで「有効化」をクリックします。
通常、ブレークポイントに達すると常になんらかの影響があります。インスタンス・ブレークポイントは、ブレークポイントが表示されるメソッドを定義するクラスの特定のインスタンスに関連付けられます。
インスタンス・ブレークポイントは、選択したインスタンスを識別するインスタンス・フィルタに関連付けられているソース・ブレークポイントです。インスタンス・ブレークポイントは、デバッガの複数の実行にわたっては保持されません。インスタンス・フィルタは、「ブレークポイント」ウィンドウの「インスタンス・フィルタ」列に表示されます。
インスタンス・ブレークポイントを設定するには、次のようにします。
インスタンス・ブレークポイントに変換するソース・ブレークポイントを設定します。ソース・ブレークポイントは、インスタンスのクラスのメソッド内にある必要があります。詳細は、第14.9.7項「ソース・ブレークポイントの設定方法」を参照してください。
目的のインスタンスがアクセスできる位置に2番目のブレークポイントを設定します。
次のように、インスタンス・フィルタを定義します。
デバッガを開始または再開します。
デバッガが2番目のブレークポイントで停止したら、「データ」ウィンドウ、「スマート・データ」ウィンドウまたは「監視式」ウィンドウで目的のインスタンスを検索します。
インスタンスを右クリックして「インスタンス・フィルタ」を選択し、インスタンス・ブレークポイントになるソース・ブレークポイントを選択します。
追跡するその他のインスタンスに対して、この作業を繰り返します。
デバッガを再開します。
デバッガは、選択したインスタンスのインスタンス・ブレークポイントでのみ停止します。
一般に、ブレークポイントは特定のコード行に追加され、そのコード行が実行される直前にデバッガを一時休止します。また、特定タイプの例外が発生したときにアクティブになるようにブレークポイントを設定することもできます。例外ブレークポイントは、特定のコード行には関連付けられません。
例外ブレークポイントを設定するには、次のようにします。
「ブレークポイント」ウィンドウで、「ブレークポイント」ツールバーの「ブレークポイントの追加」をクリックします。サブメニューから「例外ブレークポイント」を選択します。
例外ブレークポイントの作成・ダイアログが表示されます。
「定義」タブで、例外クラス名を入力または選択します。
必要に応じて、「例外の検出で常にブレーク」チェック・ボックスまたは「捕捉されない例外の検出でブレーク」チェック・ボックスの選択を切り替えることができます。デフォルトでは両方のチェック・ボックスが選択されています。
「OK」をクリックします。
これで、指定したタイプの例外がスローされるとデバッガは一時停止します。
デフォルトでは、デバッガにより、java.lang.Throwable
に未検出の例外がスローされた場合の永続例外ブレークポイントが自動的に作成されます。このブレークポイントは、未検出の例外がスローされると発生します。永続ブレークポイントは無効にできますが、削除できません。
ブレークポイントを条件付きにすると、デバッガは特定の条件が満たされた場合に一時休止します。ブレークポイントを初めて設定すると、デバッガはブレークポイントを検出するたびにプログラムの実行を一時休止します。ただし、「ブレークポイントの編集」ダイアログを使用して、特定の条件でのみアクティブになるように、ブレークポイントをカスタマイズできます。
「ブレークポイントの編集」ダイアログの「条件」タブで、プログラムの実行中にデバッガがブレークポイントを検出するたびに評価される式を入力します。式がtrueと評価された場合、プログラムはブレークポイントで一時停止します。ブレークポイント条件を評価できない場合、デバッガは、無条件ブレークポイントであるかのようにその場所で停止します。
条件付きブレークポイントのある行でデバッガが停止すると、ブレークポイント・アイコンの横にブレークポイント条件を示すゴースト・ウィンドウが表示されます。条件がtrueであったためにデバッガが停止した場合は、緑色のチェックマーク・アイコン付きで条件が表示されます。条件を評価できなかったためにデバッガが停止した場合は、疑問符アイコン付きで条件が表示されます。
たとえば、変数mediumCount
が10より大きい場合のみコード行で一時停止するブレークポイントを設定するとします。
ブレークポイントの条件を設定するには、次のようにします。
ソース・エディタで行の左側をクリックして、コード行にブレークポイントを設定します。
「表示」→「デバッガ」→「ブレークポイント」を選択して、「ブレークポイント」ウィンドウを開きます。
「ブレークポイント」ウィンドウで、設定したブレークポイントを右クリックし、「編集」を選択します。
「ブレークポイントの編集」ダイアログで、「条件」をクリックします。
「条件」フィールドに、たとえばmediumCount > 1
のように入力します。
「OK」を選択します。
「ブレークポイントの編集」ダイアログには有効なJava言語式を入力できますが、ブレークポイントの場所から式に含まれるすべての記号にアクセスできる必要があります。また、式にはメソッド・コールを含めることはできません。例外ブレークポイントの場合、_throw
を使用して条件に例外オブジェクトを使用できます。
ソース・エディタに配置されているブレークポイントを右クリックして条件を設定することもできます。または、エディタ・ウィンドウの左余白にあるブレークポイント・アイコンの上にマウス・カーソルを重ねます。詳細は、第14.9.6項「ブレークポイントの編集」を参照してください。
「パスの回数」フィールドでは、ブレークポイントをアクティブにするまでのパスの回数を指定します。パスの回数は、ループがn回目の繰返しで失敗したと考えられる場合に便利です。デバッガはプログラムの実行中にブレークポイントをn回検出するとプログラムを一時休止します。デフォルト値は1です。
ブレークポイント・ウィンドウに「パスの回数」列が表示されている場合、プログラムの実行中にコードのブレークポイント行が検出されるたびにパスの回数の値が減少することが確認できます。ブレークポイント行が検出されたときにパスの回数が1の場合、ブレークポイントがアクティブになり、プログラムはその行で一時休止します。
パスの回数をブレークポイント条件とともに使用すると、プログラムは、条件がtrueとなったn回目にブレークポイントで一時停止します。パスの回数は、条件がtrue
の場合のみ減少します。
ブレークポイントのリストを表示するには、メイン・メニューから「ウィンドウ」→「デバッガ」→「ブレークポイント」を選択します。デバッガによって有効であると確認されたブレークポイントが、図14-8のようなアイコンで示されます。「ブレークポイント」ウィンドウを使用して、ソース・コード内のブレークポイントの場所を素早く検索できます。
「ブレークポイント」ウィンドウを使用して、ソース・エディタでブレークポイントを検索するには、次のようにします。
「ブレークポイント」ウィンドウで、ブレークポイントを選択します。
右クリックして、ポップアップ・メニューから「ソースに移動」を選択します。
ブレークポイント・グループを作成し、ブレークポイントをこのグループに追加することにより、複数のブレークポイントを1回の処理で有効または無効にできます。ブレークポイント・グループを作成すると、このグループをブレークポイントと同じように有効化、無効化および削除できます。
ブレークポイント・グループを作成するには、まずブレークポイントを作成し、その後でブレークポイント・グループを作成するために編集します。これにより、選択したグループに含まれるすべてのブレークポイントが有効になります。ブレークポイントが有効である場合、ブレークポイントが発生すると、条件および処理が実行されます。
ブレークポイント・グループを作成するには、次のようにします。
「ブレークポイント」ウィンドウで、ブレークポイントを右クリックし、ポップアップ・メニューから「編集」を選択します。
「ブレークポイントの編集」ダイアログが表示されます。
「ブレークポイントのグループ名」フィールドにブレークポイントのグループ名を入力します。
「OK」をクリックします。
ブレークポイント・ウィンドウに新しいグループが作成され、フォルダ・アイコンで示されます。編集したブレークポイントは、自動的に新しいグループに入ります。
ブレークポイントを移動するには、ブレークポイント・グループまでドラッグ・アンド・ドロップするか、または、次の手順を実行します。
ブレークポイント・グループにブレークポイントを移動するには、次のようにします。
「ブレークポイント」ウィンドウで、ブレークポイントを右クリックし、ポップアップ・メニューから「編集」を選択します。
「ブレークポイントの編集」ダイアログが表示されます。
「ブレークポイントのグループ名」フィールドで、ドロップダウン・リストからブレークポイントのグループを選択するか、新規グループ名を入力します。
「OK」をクリックします。
ブレークポイントが指定したグループに追加されます。
プログラムは、ステップ実行すると表示できますが、通常はプログラム変数の値を調べて不具合を検出する必要があります。たとえば、ループをステップ実行する際に索引変数の値を確認したり、メソッド・コールで渡されるパラメータの値を確認できると便利です。プログラムがデバッガで一時休止したときに、変数、引数、フィールドおよび配列項目の値を調べることができます。
デバッグ・セッション中にデータ、スマート・データ、インスペクタ、監視式ウィンドウを使用して、データ項目の値をインスペクトおよび変更できます。
JDeveloperでは、「データ」ウィンドウを追加せずにデータ項目をインスペクトすることもできます。ソース・エディタで、デバッガがブレークポイントで停止したら、データ項目の上にマウス・カーソルを重ねると、名前、値、タイプが表示されます。データ項目がオブジェクトまたは配列の場合は、オブジェクト階層の下位にある、選択した項目の子もインスペクトできます。
データ項目をインスペクトするときには、デバッグ・セッションの実行中に異なる式で評価します。プログラム・データ値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定できます。
データ項目をインスペクトするには、次のようにします。
デバッガがブレークポイントで停止している間にデータ・ウィンドウを開きます。
「データ」ウィンドウで項目を右クリックし、ポップアップ・メニューから「インスペクト」を選択します。
フローティング形式の「インスペクタ」ウィンドウが開き、項目の名前、値、その他の関連情報が表示されます。このウィンドウに表示される列は、「ツール」→「プリファレンス」→「デバッガ」→「インスペクタ」ページで有効にした列設定によって異なります。詳細は、第14.8.5項「「インスペクタ」ウィンドウの使用方法」を参照してください。
項目の式を評価するには、ポップアップ・メニューから「式の編集」を選択します。
監視式を追加することも、データ項目をさらにインスペクトすることもできます。
終わったら、「インスペクタ」ウィンドウを閉じます。
また、デバッグ・セッション中にプログラム・データ値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定できます。
変数の値を変更する場合、変更はその特定のプログラム実行に対してのみ有効です。「データ」ウィンドウまたは「監視式」ウィンドウで行った変更は、プログラムのソース・コードまたはコンパイル済のプログラムには影響しません。変更を確定するには、ソース・エディタでプログラムのソース・コードを変更し、プログラムを再コンパイルする必要があります。
新しい値の型と割当先の変数の型とには互換性が必要です。割当てによってコンパイルに時間がかかったり、実行時エラーが発生したりした場合には、有効な変更値とは言えません。
データ・ウィンドウで変数の値を変更するには、次のようにします。
デバッガがブレークポイントで停止している間にデータ・ウィンドウを開きます。
データ・ウィンドウで項目を右クリックし、ポップアップ・メニューから「値の変更」を選択します。
選択した項目の名前と現在の値を示す「値の変更」ダイアログが表示されます。
項目の新しい値を入力します。
プリミティブ値を変更する場合、新しい値を入力できます。
(文字列以外の)参照ポインタを変更する場合、既存オブジェクトまたは配列のメモリー・アドレスを入力できます。
文字列を変更する場合、新しい文字列値または既存文字列のメモリー・アドレスを入力できます。
「OK」をクリックして、項目の値を変更し、ダイアログを閉じます。
データ・ウィンドウ、スマート・データ・ウィンドウ、インスペクタ・ウィンドウまたは監視式ウィンドウに新しい値が表示されます。
監視式を使用すると、プログラムの実行に従って変化する、変数および式の値を監視できます。監視式を入力すると、監視式ウィンドウに、式の現在の値が表示されます。プログラムの実行時、プログラムによって監視式の変数の値が更新されるため、監視の値が変化します。
監視は、「スタック」ウィンドウでの選択内容によって制御される現行のコンテキストに従って、式を評価します。新しいコンテキストに移動すると、その新しいコンテキストに対して式が再評価されます。監視式の変数が定義されていない場所に実行ポイントが移動すると、監視式全体が未定義になります。監視式を評価できる場所に実行ポイントが戻ると、「監視」ウィンドウに再び監視式の値が表示されます。
「監視」ウィンドウを開くには、メイン・メニューから「ウィンドウ」→「デバッガ」→「監視」を選択します。
また、次のいずれかの方法で監視を追加できます。
データ・ウィンドウでデータ項目を選択します。右クリックして、「監視式」を選択します。
「監視式」ウィンドウを右クリックし、「監視式の追加」を選択します。
マウスを使用してデータをデータ・ウィンドウから監視式ウィンドウにドラッグ・アンド・ドロップします。
ソース・エディタで、式に監視を追加できます。
ソース・エディタから監視式を追加するには、次のようにします。
ソース・エディタで、監視する式をカーソルを使用して選択します。
右クリックし、ポップアップ・メニューから「監視式」を選択して、「監視式」ウィンドウに式を追加します。
式が入力されたダイアログが表示されます。
必要に応じて式を編集します。
「OK」をクリックします。
監視を編集するには、「監視」ウィンドウでその式を選択します。
監視式を編集するには、次のようにします。
監視式ウィンドウで式を選択して右クリックし、「監視式の編集」を選択します。
「監視式の編集」ダイアログが表示されます。
新しい式を入力するか、既存の式を変更して、「OK」をクリックします。
「インスペクタ」ウィンドウで、既存の式を変更できます。
インスペクタ・ウィンドウで式を変更するには、次のようにします。
対応するテキスト・ボリュームに新しい式を入力するか、「インスペクタ」ウィンドウで右クリックして、ポップアップ・メニューから「式の編集」を選択します。
「式の編集」ダイアログが表示されます。
新しい式を入力します。
「OK」をクリックします。
デバッグ中、フィルタを使用して、データ関連「デバッガ」ウィンドウでオブジェクトを展開するときに表示するフィールド数を減らすことができます。このタスクは、「スマート・データ」ウィンドウ、「データ」ウィンドウ、「インスペクタ」ウィンドウ、「監視式」ウィンドウ、および「モニター」ウィンドウの左側で「オブジェクト設定」ダイアログを使用して実行できます。フィールド数を減らすことにより、デバッグの対象範囲が絞られ、プログラムの問題を容易に検出して切り離すことができるようになります。
たとえば、データ・ウィンドウでクラスに対してフィルタを作成し、必要なフィールドのみを表示できます。これにより、画面が見やすくなり、関連するデータを簡単に見つけることができます。
「フィルタ対象クラス」リストでフィールドを表示または非表示にするには、次のようにします。
データ関連「デバッガ」ウィンドウでオブジェクトを選択します。右クリックして、ポップアップ・メニューから「オブジェクト設定」を選択します。
「オブジェクト設定」を選択することで、この特定のオブジェクトに関する「オブジェクト設定」ダイアログに直接移動でき、このダイアログで、オブジェクトを展開するときに表示するフィールドと表示しないフィールドを制御するフィルタを指定できます。
「オブジェクト設定」ダイアログでは、選択したオブジェクトのスーパークラス階層を簡単に横断しながら、各スーパークラスのフィルタを定義および更新できます。「タイプ」ウィンドウでクラスを選択し、「デバッガ」ウィンドウの「値」列に表示する、または表示しないフィールドを選択します。
「表示するフィールド」リストから「非表示にするフィールド」リストにフィルタを移動するには、矢印をクリックします。
終了したら「OK」をクリックします。
JDeveloper IDEを使用し、ローカルでコードをデバッグする他にも、リモート・マシンにあるコードや別のVMインスタンスで実行中のコードをデバッグできます。つまり、デバッガを使用して、デプロイ済のコードをデバッグすることが可能です。デバッガは、同時に複数のリモートVMにアタッチできるため、WebサーバーにデプロイされたJSPがアプリケーション・サーバーにデプロイされたEJBにアクセスするような分散アプリケーションを、シームレスにデバッグできます。
リモート・デバッグとローカル・デバッグの大きな違いは、デバッグ・セッションの開始方法にあります。ローカル・デバッグの場合、JDeveloperによってデバッグするプログラムが自動的に起動し(デバッグ対象プロセス)、デバッガがそのプログラムにアタッチされます。リモート・デバッグの場合、デバッグするプログラムを手動で起動する必要があります。また、JSPまたはサーブレットをデバッグしている場合は、JSPまたはサーブレットを起動するためのブラウザを手動で起動する必要があります。
デバッグ・プロセスが起動してJDeveloperデバッガがアタッチされた後のリモート・デバッグは、ローカル・デバッグとほとんど同じです。デバッグ対象プロセスがJDeveloperと同じマシンで動作している場合も、別のマシンで動作している場合も、リモート・デバッグを使用できます。
ローカルのデバッグとは異なり、リモート・デバッグ・セッションを開始する前に、使用するプロトコルを選択する必要があります。リモート・デバッグ・プロトコルは、「実行構成の編集」ダイアログの「デバッガ」→「リモート」ページで設定します。
「Httpアナライザ」を使用して、JSPやサーブレットなどのWebページをデバッグすることもできます。詳細は、第8章「アプリケーションの監査とプロファイリング」を参照してください。
「JPDAにアタッチ」は、指定したアドレスでデバッガ・アプリケーションにアタッチする場合に選択します。SunのJava Platform Debugger Architecture (JPDA)接続および起動の詳細は、http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.html
を参照してください。
「JPDAのリスニング」は、デバッグ対象プロセスがデバッガにアタッチするために、デバッガでリスニングすることを指定する場合に選択します。また、リモートPL/SQLプログラムをデバッグする場合は、このオプションを選択します。
リモート・デバッグのプロジェクトを設定した後、デバッグ・プロトコルおよび環境に基づいて適切なコマンドを発行し、リモート・デバッグ・セッションを開始できます。
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に設定した場合、デバッグ対象プロセスはデバッガの接続を待機せずただちに開始されます。
コマンドラインの例:
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を実装します。
SunのJPDA Connection and Invocationの詳細は、
を参照してください。
http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html
任意のプロジェクトを構成して、リモート・デバッグを実行できます。
リモート・デバッグ用にプロジェクトを設定するには、次のようにします。
ツールバーから「デバッグ」をクリックします。
適切なアタッチ・ダイアログが表示されます。
「ホスト」リスト・ボックスで、リモートのデバッグ対象プロセスを開始するマシンの名前またはIPアドレスを入力するか、選択します。
「ポート」リスト・ボックスで、リモートのデバッグ対象プロセスのポート番号を入力するか、選択します。
「OK」をクリックします。
デバッガが接続されると、ログ・ウィンドウに、接続に成功したことを示すメッセージが表示されます。
JSPまたはサーブレットをデバッグしている場合は、ブラウザを起動してJSPまたはサーブレットにアクセスする必要があります。
EJBをリモート・デバッグしている場合は、EJBにアクセスするEJBクライアントを実行する必要があります。
通常と同じようにデバッグ・セッションを続けます。
デバッグ対象プロセスを終了することなく、リモートのデバッグ対象プロセスからデバッガの接続を解除するには、「実行」→「連結解除」メニュー・オプションを選択します。T
このオプションは、アプリケーション・サーバーをリモート・デバッグする場合に適しています。
リモートのデバッグ対象プロセスを終了するには、「実行」→「終了」メニュー・オプションを選択するか、「終了」アイコンを選択します。
この項では、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にアクセスします。ブレークポイントが検出され、すべて予想どおりに動作します。