ヘッダーをスキップ
Oracle® Fusion Middleware Oracle JDeveloperユーザーズ・ガイド
11gリリース2(11.1.2.3.0)
B66717-03
  目次へ移動
目次

前
 
次
 

19 Javaプログラムの実行およびデバッグ

この章では、JDeveloperで提供されるツールや機能を使用して、Javaプログラムを実行およびデバッグする方法について説明します。Javaプログラムの記述とコンパイルの詳細は、第18章「Javaでのプログラミング」を参照してください。

この章では、次の項目について説明します。

19.1 Javaプログラムの実行およびデバッグについて

JDeveloperには、Javaプログラムの実行方法を監視および制御するいくつかの方法があります。Javaプログラムを実行するとき、JDeveloperは実行、デバッグおよびプロファイリングされるプロセスを常時追跡します。また、JDeveloperでは、Java、JSPおよびサーブレット・ソース・ファイルのリモート・デバッグとローカル・デバッグを提供しています。

19.2 Run Managerの理解

Run Managerは、実行、デバッグ、プロファイリングが行われるプロセスを追跡します。このような複数のプロセスが同時にアクティブになっている場合、「Run Manager」ウィンドウが自動的に表示されます。プロセスが完了すると、そのプロセスはRun Managerから自動的に削除されます。

Run Managerを表示するには、次のようにします。

実行マネージャでプロセスを終了するには、次のようにします。

実行ログを表示するには、次の手順を実行します。

19.3 プロジェクトを実行用に設定する方法

ターゲット、起動オプション、およびデバッガ、ロガー、プロファイラの動作など、プログラムの実行方法を制御する設定が実行構成にまとめられます。

プロジェクトには、プロジェクトの特定のファセットや開発プロセスのフェーズ用に設定された実行構成が複数含まれています。実行構成をプロジェクトにバインドし、プロジェクトで作業するすべてのユーザーに使用可能とするか、ユーザー固有のカスタム構成とすることができます。

新規プロジェクトごとにデフォルトの実行構成が作成されます。実行構成を変更したり、既存の実行構成をコピーして新規の構成を作成できます。

実行構成を選択するには、次のようにします。

  1. メイン・メニューから「アプリケーション」「プロジェクト・プロパティ」を選択します。

  2. 「実行/デバッグ」ページを選択します。

  3. 「実行構成」リストから実行構成を選択します。

実行構成を変更するには、次のようにします。

  1. 前述のように実行構成を選択します。

  2. 「編集」をクリックします。

    「実行コンフィギュレーションの編集」ダイアログが開きます。

  3. ダイアログ・ページで設定に必要な変更を行います。

    ダイアログ・ページの使用中にヘルプを表示するには、[F1]を押します。

実行構成を作成するには、次のようにします。

  1. 前述のように実行構成を選択します。

  2. 「新規」をクリックします。

    「実行コンフィギュレーションの作成」ダイアログが開きます。

  3. 「名前」ボックスで、新しい実行構成の名前を入力します。

  4. 「設定のコピー元」ドロップダウン・ボックスで、コピー元の既存の実行構成を選択します。

  5. コピー元と同じ設定で新しい実行構成を作成するには、「OK」をクリックします。

19.4 アプレットの実行

JDeveloperでは、アプレット・ビューアまたは統合WebLogic Serverインスタンスでアプレットを実行できます。アプレット・ビューアを使用すると、Webブラウザを起動せずにアプレットを実行できます。ブラウザでアプレットを実行する場合は、統合WebLogic Serverインスタンスで実行できます。

アプレットを作成し、HTMLファイルでクラスパスが正しく設定されていることを確認した後、次のいずれかの方法で「実行」コマンドを実行して、アプレットを実行できます。

  1. ナビゲータで、<APPLET>タグを含むHTMLファイルを選択します。

  2. アプレットを実行するには、HTMLファイルを右クリックし、「実行」を選択します。

  3. ダイアログで、ターゲット・アプレットを起動する方法を選択し、「OK」をクリックします。

    • アプレット・ビューア内: アプレット・ビューアからアプレットが起動されます。

    • サーバー・インスタンス内: 統合サーバーが起動し、アプレットがサーバーで実行されます。

19.4.1 引数の格納にHTMLファイルを使用

アプレットはHTMLページで実行され、このページから表示サイズおよびその他のパラメータを取得します。アプレットをJDeveloperで実行するには、適切な<APPLET>タグを含むHTMLファイルを指定する必要があります。

大文字と小文字は、パラメータ・タグでは区別されませんが、パラメータ名では区別されます。

<APPLET CODE="foo.class" WIDTH=200 HEIGHT=20> </APPLET> 

<APPLET>タグと</APPLET>タグの間に次のような<PARAM>タグを挿入して、パラメータをアプレットに渡すこともできます。

 <PARAM NAME=foo VALUE=true>

例19-1に、パラメータを渡す際に使用するHTMLコードを示します。

例19-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>
...

19.5 プロジェクトまたはファイルの実行方法

プロジェクトまたはファイルをビルドした後、実行できます。

プロジェクトまたはファイルを実行するには、次の手順に従います。

  1. ナビゲータで、実行するプロジェクトまたはファイルを選択します。

  2. 次のいずれかの方法でアプリケーションを実行します。

    • プロジェクトの場合のみ、メイン・メニューから「実行」「プロジェクトの実行」を選択します。

    • ポップアップ・メニューから「実行」を選択します。

    • ツールバーの「実行」アイコンをクリックします。

    Javaアプリケーションのメイン・メソッドが起動します。

19.5.1 コマンドラインからのプロジェクトの実行方法

オペレーティング・システムのコマンドラインからプロジェクトを実行するための要件は、次のとおりです。

  • プロジェクトがスタンドアロン実行可能プロジェクトであること

  • アプリケーションのmain()メソッドを含むクラス・ファイルを選択すること

アプリケーションを起動するには、次のように入力します。

次のように入力します。

java -cp <jdev_install>\jdeveloper\jdev\mywork\Workspace1\Project1\classes package1.Application1

コマンドラインから実行可能JARファイルを起動するには、次のように入力します。

次のように入力します。

java -jar <application>.jar 

ここで、<application>は使用しているJARファイルの名前です。

19.5.2 Java Virtual Machineの変更方法

オペレーティング・システムの要件によって、開発対象のJava Virtual Machine (VM)を変更する必要がある場合があります。たとえば、クライアント側アプリケーションの場合は、HotSpot Client VMを使用し、長時間実行のサーバー・アプリケーションを実行するにはServer VMを使用します。

Java Virtual Machineを変更するには、次のようにします。

  1. ナビゲータでプロジェクトを右クリックし、ポップアップ・メニューから「プロジェクト・プロパティ」を選択します。

  2. 「実行/デバッグ/プロファイル」ページを開きます。

  3. 実行構成を選択し、「編集」をクリックします。

    これによって、「実行構成の編集」ダイアログが開きます。

  4. 「起動設定」ページの「仮想マシン」リスト・ボックスで、使用可能なオプションを選択します。

    プロジェクトの実行およびデバッグに、選択したJVMが使用されます。

  5. 詳細は、「ヘルプ」をクリックしてください。

19.5.3 プログラム用クラスパスの設定

コマンドラインから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環境変数を設定する方法を選択できます。

19.5.3.1 CLASSPATH環境変数の設定(java.exeの場合)

Java2 Standard Edition (J2SE)にはjava.exeが含まれています。これは開発ツールとして使用するためのファイルで、Javaプログラムとともに配布するためのライセンスは供与されていません。コマンド・プロンプト画面からJavaアプリケーションをテストする際に使用します。

コマンド・プロンプト画面からJavaアプリケーションを実行するには、プログラムの実行に必要なすべてのクラスが含まれるように、システム環境変数CLASSPATHを定義する必要があります。これには、プログラムで使用される、JDeveloperによって提供されるすべてのライブラリ・クラスが含まれます。

19.5.3.2 JDeveloperライブラリのCLASSPATHの使用方法

JDeveloperには、Javaプログラムの生成に役立つ数百のライブラリ・クラスが付属しています。クラスは、J2SE、サード・パーティの開発者、およびオラクル社から提供されます。各ライブラリは、アップグレードを容易に行うために個別に管理されます。このため、JDeveloperで作成するプログラムをコマンド・プロンプト画面から実行するには、クラスパスに多数のアーカイブ・ファイルを含める必要があります。

プロジェクトで使用される各ライブラリへのパスのみをリストに含めることをお薦めします。プロジェクトで使用されないパスをリストに含めた場合でもプログラムは起動しますが、パフォーマンス上の理由から、不要なライブラリはすべて排除してください。

CLASSPATH変数を設定するコマンドの書式は次のとおりです。

set CLASSPATH=path1;path2;path3;...path_n

注意:

パスの1つにスペースが含まれる場合でも、クラスパスに引用符を使用しないでください。


19.5.3.3 プロジェクトを含めるようにCLASSPATHを設定する

出力パスにデフォルトのディレクトリを使用した場合、クラスパスに次のディレクトリを追加し、java.exeを使用してJavaアプリケーションをテストできます。

C:\<jdev_install>\jdeveloper\jdev\mywork\Workspace1\Project1\classes

この変数を設定することで、java.exeを使用して、出力ディレクトリmyworkからアプリケーションを実行できます。

Javaプログラムを他のディレクトリにデプロイした場合、アプリケーション・パッケージの親ディレクトリへのパスを追加する必要があります。

CLASSPATH変数は長い文字列であるため、入力を誤る可能性があります。CLASSPATHをシステム環境変数として設定すると、入力時間と入力ミスを減らすことができます。

19.5.3.4 CLASSPATHパラメータの設定(java.exeの場合)

Javaランタイム・エンジン(java.exe)では、CLASSPATH環境変数は使用しません。CLASSPATHを、java.exeコマンドのパラメータとして使用する必要があります。コマンドの書式は次のとおりです。

java -cp <classpath> package.Application

classpathは、Javaプログラムおよびプログラムで使用される依存クラスへの完全なCLASSPATHです。CLASSPATHディレクトリ名にスペースが含まれない場合、引用符は使用しなくてもかまいません。

19.5.3.5 <APPLET>タグへのCLASSPATHパラメータの埋込み

アプレットを実行する場合、ブラウザによって、ホストの*.htmlファイルの<APPLET>タグにARCHIVEおよびCODEBASEパラメータで指定するCLASSPATHが提供されます。

CODEBASEパラメータでは、インターネット・ブラウザがクラス・ファイルを検索するルート・ディレクトリを設定します。クラスがアプレットをコールするHTMLページと同じディレクトリに格納されている場合、CODEBASEパラメータを省略できます。異なるディレクトリに格納されている場合は、HTMLファイルからCODEBASEディレクトリの場所までの絶対パスまたは相対パスを使用します。ディレクトリを示す場合、円記号(\)ではなくフォワード・スラッシュ(/)を使用します。

ARCHIVEパラメータでは、アプリケーションで使用するCLASSPATHと同様、プログラムおよびプログラムをサポートするライブラリ・ファイルを含むJARファイルの場所と名前のリストを指定します。これらには3つの重要な違いがあります。

  • Javaアーカイブ・ファイル名は、セミコロン(;)ではなくカンマ(,)で区切られます。

  • Javaアーカイブ・ファイルがCODEBASEのサブディレクトリに格納されている場合、ディレクトリを示すには、円記号(¥¥)ではなくフォワード・スラッシュ(/)を使用します。

  • アプレットのJavaセキュリティ・モデルに対する制約により、ARCHIVEパラメータが参照するクラスは、CODEBASEディレクトリのサブディレクトリにのみ置くことができます。つまり、親ディレクトリ(../)を使用してアーカイブ・ファイルの場所を設定しようとすると、セキュリティ違反エラーが発生します。

19.6 デバッガについて

デバッグとは、プログラム内のエラーを検出して修正するプロセスです。JDeveloperに統合されているデバッガでは、Javaアプリケーション、アプレット、サーブレット、JavaServer Pages (JSP)およびEnterprise JavaBeans (EJB)をデバッグできます。JDeveloperでは分散デバッグがサポートされているため、同一のマシンまたは別のマシンにある1つまたは複数のオブジェクトをデバッグできます。

デバッガにより、コードを調べて問題のある領域を特定し修正するための多くの機能が提供されます。コードの分析には、ローカルとリモートの2種類のデバッグが可能です。

ローカル・デバッグ・セッションを開始するには、ソース・ファイルにブレークポイントを設定し、デバッガを開始します。JDeveloperでサーブレットなどのアプリケーションをデバッグする際は、実行フローを完全に制御して、変数の値を表示および変更できます。また、クラス・インスタンスのカウント数とメモリー使用量を監視することによって、アプリケーションのパフォーマンスを調べることができます。JDeveloperは、アプリケーションから他のソース・ファイルへのコールに従うか、またはソース・ファイルが使用できない場合はスタブ・クラスを生成します。

リモート・デバッグでは、2つのJDeveloperプロセスが必要です。1つはデバッガ・プロセス、もう1つはデバッグ対象プロセスです。デバッグ対象プロセスは異なるプラットフォームに存在している場合があります。デバッグ対象プロセスが開始し、デバッガ・プロセスがそのデバッグ対象プロセスにアタッチされた後は、リモート・デバッグとローカル・デバッグの動作は似ています。

JDeveloperでは、コード内で問題のある領域を効率的に特定できるようにする特殊な目的のデバッグ・ウィンドウが、次のように数多く提供されます。

デバッガ・ウィンドウを開くには、「表示」「デバッガ」を選択します。

19.6.1 デバッガのアイコンの理解

表19-1は、JDeveloperのデバッガとRun Managerの様々なアイコンの一覧です。これらのアイコンは、「デバッガ」ウィンドウおよび「ログ」ウィンドウなど、JDeveloperのユーザー・インタフェースの各領域で使用されます。

表19-1 デバッガとRun Managerのアイコン

アイコン 名前 説明
配列

配列

JDeveloperのすべてのデータ関連ウィンドウの配列クラスを表します。

ブレークポイントの追加


ブレークポイントの追加

ブレークポイントの作成に使用する「ブレークポイント」ツールバー・ボタンを表します。

「ブレークポイント」メニュー


「ブレークポイント」メニュー

「表示」「デバッガ」「ブレークポイント」メニュー・オプション、または「ブレークポイント」ウィンドウのタブ・アイコンを表します。

クラス


クラス

「表示」「デバッガ」「クラス」メニュー・オプション、「クラス」ウィンドウのタブ・アイコン、および「クラス」ウィンドウのクラスを表します(クラスのトレースが無効の場合はグレー表示)。

行番号表がない「クラス」


行番号表がない「クラス」

クラス・ウィンドウに表示されます。行番号表がないクラス(曖昧なクラス)を表します。

現在の実行ポイント


現在の実行ポイント

ソース・エディタのマージンに表示される現在の実行ポイントを表します。「実行」「実行中の行を表示」メニュー・オプションを選択して表示できます。

現在のスレッド


現在のスレッド

スレッド・ウィンドウの現在のスレッドを表します。

データ


データ

「表示」「デバッガ」「データ」メニュー・オプション、「表示」「デバッガ」「スマート・データ」メニュー・オプション、および「データ」ウィンドウと「スマート・データ」ウィンドウのタブ・アイコンを表します。

デバッグ([Shift]+[F9])


デバッグ([Shift]+[F9])

「実行」<project_name>のデバッグ」メニュー・オプション、「デバッグ」ツールバー・ボタン、Run Managerナビゲータのプロセス・フォルダに含まれるデバッグ・プロセス、デバッグ・プロセスのログ・ページ、デバッグ・レイアウト、リモート・デバッグとプロジェクトのプロファイリング・ウィザードを表します。

デバッグ・リスナー・ノード


デバッグ・リスナー・ノード

「Run Manager」ナビゲータのデバッグ・リスナー・ノードを表します。

ダイアグラムを使用したデバッグ


ダイアグラムを使用したデバッグ

「実行」「ダイアグラムを使用して<project_name>をデバッグ」メニュー・オプションを表します。デバッグ中にUMLシーケンス図を作成できます。

無効なブレークポイント


無効なブレークポイント

ソース・エディタのマージンおよびブレークポイント・ウィンドウ内の無効なブレークポイントを表します。また、このアイコンは、ブレークポイントを無効にする「ブレークポイント」ツールバー・ボタンを表します。

ブレークポイントの削除


ブレークポイントの削除

ブレークポイントを削除するための「ブレークポイント」ツールバー・ボタンを表します。

ブレークポイントの編集


ブレークポイントの編集

選択したブレークポイントの編集に使用できる「ブレークポイント」ツールバー・ボタンを表します。

ガベージ・コレクション


ガベージ・コレクション

「実行」「ガベージ・コレクション」メニュー・オプション、およびクリック可能な「ガベージ・コレクション」ツールバー・ボタンを表します。

インタフェース


インタフェース

「クラス」ウィンドウのインタフェースを表します。

ヒープ


ヒープ

「表示」「デバッガ」「ヒープ」メニュー・オプション、および「ヒープ」ウィンドウのタブ・アイコンを表します。

「ヒープ」フォルダ


「ヒープ」フォルダ

ヒープ・ウィンドウのフォルダを表します。

方法


方法

「スタック」ウィンドウのメソッドを表します。

モニター


モニター

「表示」「デバッガ」「モニター」メニュー・オプション、および「モニター」ウィンドウのタブ・アイコンを表します。

オブジェクト


オブジェクト

JDeveloperのすべてのデータ関連ウィンドウのオブジェクトを表します。

パッケージ


パッケージ

「クラス」ウィンドウのパッケージを表します(パッケージのトレースが無効な場合はグレー表示)

プログラムの停止


プログラムの停止

「実行」「プログラムの停止」メニュー・オプション、およびクリック可能な「プログラムの停止」ツールバー・ボタンを表します。

プリミティブ


プリミティブ

JDeveloperのすべてのデータ関連ウィンドウの基本項目を表します。

再開


再開

「実行」「再開」メニュー・オプション、およびクリック可能な「再開」ツールバー・ボタンを表します。

実行


実行

Run Managerナビゲータの実行中のプロセスを表します。実行中のプロセスの場合はログ・ページに表示されます。ツールバーにも表示され、選択したノードを実行できます。

カーソルまで実行([F4])


カーソルまで実行([F4])

「実行」「カーソルまで実行」メニュー・オプションを表します。指定した場所までコードを実行します。

スタック


スタック

「表示」「デバッガ」「スタック」メニュー・オプション、および「スタック」ウィンドウのタブ・アイコンを表します。

スタック・フォルダ


スタック・フォルダ

「データ」ウィンドウのstaticフォルダを表します。

メソッドの最後まで実行


メソッドの最後まで実行

「実行」「メソッドの最後まで実行」メニュー・オプションおよびクリック可能な「メソッドの最後まで実行」ツールバー・ボタンを表します。

トレース実行([F7])


トレース実行([F7])

「実行」「トレース実行」メニュー・オプション、およびクリック可能な「トレース実行」ツールバー・ボタンを表します。

ステップ・アウト


ステップ・アウト

「実行」「ステップ・アウト」メニュー・オプション、およびクリック可能な「ステップ・アウト」ツールバー・ボタンを表します。

ステップ実行


ステップ実行

「実行」「ステップ実行」メニュー・オプション、およびクリック可能な「ステップ実行」ツールバー・ボタンを表します。

終了


終了

クリックして、アプリケーションのデバッグを停止できる終了ツールバー・ボタンを表します。

スレッド


スレッド

「表示」「デバッガ」「スレッド」メニュー・オプション、および「スレッド」ウィンドウのタブ・アイコンを表します。

スレッド


スレッド

「表示」「デバッガ」「スレッド」メニュー・オプション、および「スレッド」ウィンドウのタブ・アイコンを表します。

スレッド・グループ


スレッド・グループ

スレッド・ウィンドウのスレッド・グループを表します。

未確認ブレークポイント


未確認ブレークポイント

ソース・エディタのマージンおよび「ブレークポイント」ウィンドウの未確認ブレークポイントを表します。


19.6.2 JDeveloperでのプロジェクトのデバッグ方法

「データ」ウィンドウで引数やローカル変数を確認するなど、デバッガ機能の一部を使用するためには、先にデバッグ情報付きでコードをコンパイルする必要があります。

ブレークポイントを設定し、コードをステップ実行するには、次のようにします。

  1. ソース・エディタで文の左マージンをクリックして、実行可能文にブレークポイントを設定します。詳細は、第19.8項「ブレークポイントの管理」を参照してください。

    未確認のブレークポイントのアイコンが左マージンに表示されます。

  2. 「実行」[filename.java]のデバッグ」を選択します。

    クラスが実行され、最初のブレークポイントで停止します。

  3. ツールバーから、「トレース実行」をクリックしてメソッド・コールをトレース実行するか、「ステップ実行」をクリックしてメソッド・コールをステップ実行します。

  4. スタック・ウィンドウで、プログラムを現在の状態に導いた一連のメソッド・コールを調べます。ソース・エディタに関連ソース・コードを表示するには、メソッドをダブルクリックします。

  5. スマート・データ・ウィンドウとデータ・ウィンドウで、引数と変数を調べます。

  6. スレッド・ウィンドウを表示して、プログラムの他のスレッドのステータスを調べます。

編集および再コンパイルするには、次のようにします。

  1. 変更するコード行が見つかったときは、ツールバーで「終了」をクリックするか、「実行」「終了」を選択して、デバッグ・セッションを終了できます。

  2. ソース・エディタでコードを編集します。

  3. ナビゲータで適切なオブジェクト・ノードをクリックします。

  4. メイン・メニューから「実行」<filename.java>のビルドを選択します。プロジェクト内の影響を受けるファイルが再コンパイルされ、デバッガを再度実行できます。

19.6.3 ADFコンポーネントのデバッグ方法

JDeveloperでは、ADF宣言デバッガを使用してブレークポイントに対するデバッグを実行できます。エラーを簡単に特定できない場合は、JDeveloperでADF宣言デバッガを使用してブレークポイントを設定できます。ブレークポイントに達すると、アプリケーションの実行が一時停止され、Oracle ADFバインディング・コンテナの作業対象データを調べて、予測されるデータと比較することができます。ブレークポイントのタイプによっては、ステップ機能を使用して、1つのブレークポイントから別のブレークポイントに移動できます。

JDeveloperには、ADFコンポーネントをデバッグするために、次の3つのウィンドウが用意されています。

  • アプリケーションがブレークポイントで一時停止すると、「ADFデータ」ウィンドウには「ADF構造」ウィンドウでの選択内容に基づいて関連データが表示されます。詳細は、第19.7.3項「「データ」ウィンドウの使用方法」を参照してください。

  • デバッグ・セッション中にブレークポイントに達すると、「ELエバリュエータ」ウィンドウではEL式が評価されます。ELエバリュエータを利用できるのは、JSFアプリケーションのみです。

  • ブレークポイントでアプリケーションが停止すると、「ADF構造」ウィンドウにはADFランタイム・オブジェクトのツリー構造とその関係が表示されます。詳細は、第3.11.6項「「構造」ウィンドウ」を参照してください。

各デバッガ・ウィンドウに表示する情報のタイプを制御できます。表示する列など、各ウィンドウで使用できるオプションを確認するには、ウィンドウを右クリックして、ポップアップ・メニューから「設定」を選択します。またはメイン・メニューから「ツール」「設定」を選択し、「デバッガ」ノードを展開して、各デバッガ・ウィンドウの設定ページを表示することもできます。また、デバッグ情報をテキスト出力ファイルまたはHTML出力ファイルとして保存することもできます。詳細は、第19.6.7項「デバッグ情報をファイルにエクスポートする方法」を参照してください。

JDeveloperデバッガを使用してプログラムの実行を制御するには、次のようにします。

  1. ブレークポイントまで実行します。詳細は、第19.8項「ブレークポイントの管理」を参照してください。

    ブレークポイントは、そこまで到達したときプログラムの実行が一時停止するトリガーです。これを利用して、プログラム変数の一部または全部の値を調べることができます。プログラムの実行中にブレークポイントに達すると、プログラムは一時休止し、デバッガのソース・エディタにブレークポイントを含む行が表示されます。

  2. 1つのメソッドをトレース実行したり、1つのプログラム文を一度に実行したりすることが可能です。詳細は、第19.6.11項「メソッドのトレース実行」を参照してください。

    実行ポイントがメソッドのコール上にあるときに「トレース実行」コマンドを選択すると、そのメソッドがトレース実行され、実行ポイントはメソッドの最初の文上に置かれます。

  3. メソッドをステップ実行します。詳細は、第19.6.12項「メソッドのステップ実行」を参照してください。

    実行ポイントがメソッド・コール上にあるときに「ステップ実行」コマンドを発行すると、デバッガはトレース実行するかわりに、停止せずにメソッドを実行します。プログラム文は、一度に実行されます。

  4. カーソル位置まで実行します。詳細は、第19.6.16項「カーソル位置まで実行する方法」を参照してください。

    これを利用すると、シングル・ステップ実行やブレークポイントの設定を必要とせずにプログラム中の特定の場所まで進むことができます。

  5. デバッガを一時停止して再開します。詳細は、第19.6.17項「デバッガの一時停止および再開方法」を参照してください。

    デバッガでプログラムを実行中、プログラムを一時休止できます。その後、デバッガを使用して、プログラムのこの部分に関して状態を確認できます。プログラムの該当部分の確認を終了すると、プログラムの実行を継続できます。

  6. デバッグ・セッションを終了します。詳細は、第19.6.18項「デバッグ・セッションの終了方法」を参照してください。

終了すると、プログラム値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定します。

19.6.4 プロジェクトをデバッグ用に設定する方法

JDeveloperでは、パッケージおよびクラスを有効または無効にしたり、リモート・デバッグ・オプションを設定するなど、プログラムのデバッグ方法を制御できます。

JDeveloperでデバッガおよびリモート・デバッガのオプションを設定するには、次のようにします。

  1. どのプロジェクトにも適用される作業環境を設定するために、「アプリケーション」「デフォルト・プロジェクト・プロパティ」を選択するか、または現在のプロジェクトにのみ適用される作業環境を設定するために、「アプリケーション」「プロジェクト・プロパティ」を選択します。

  2. 「実行/デバッグ/プロファイル」ノードを選択します。

  3. 実行構成を選択します。詳細は、第19.3項「プロジェクトを実行用に設定する方法」を参照してください。

  4. 「編集」をクリックします。

  5. 「デバッガ」ノードを選択します。

  6. デバッガ・ページおよびリモート・ページでオプションを設定します。

  7. 終了したら、「OK」をクリックします。

19.6.5 デバッガ開始オプションの設定方法

デバッガ開始オプションを設定することで、新しいデバッグ・セッション開始時の、デバッガの動作を指定できます。具体的には、ブレークポイントに達するまでデバッガを実行させるか、もしくはプロジェクトのコード(たとえばアプリケーションのメイン・メソッドの先頭)に達した時点でデバッガを停止させるかを指定します。

デバッガ開始オプションを設定するには、次のようにします。

  1. メイン・メニューから「ツール」「プリファレンス」を選択して「デバッガ」ページを開きます。

  2. 「デバッグの開始オプション」を選択します。

    • ブレークポイントが発生するまで実行

      デバッグを開始すると、デバッガによって、デバッグ対象のプログラムがブレークポイントに達するまで実行されます。

    • ステップ実行

      デバッグを開始すると、デバッガによって、デバッグ対象のプログラムがトレース可能なクラスのメソッドに達するまで実行されますが、クラスのstaticイニシャライザ・メソッドでは停止しません。

    • トレース実行

      デバッグを開始すると、デバッガによって、デバッグ対象のプログラムがクラスのstaticイニシャライザ・メソッドも含めたいずれかのメソッドに達するまで実行されます。

19.6.6 デバッガの起動方法

デバッグの前にプロジェクトをビルドする必要があります。

プロジェクトをビルドしてデバッガを起動するには、次のようにします。

  1. アプリケーション・ナビゲータでプロジェクトを選択します。

  2. 右クリックして、「プロジェクト・プロパティ」を選択します。「プロジェクト・プロパティ」ダイアログ・ボックスが表示されます。

  3. コンパイラ・ページを開きます。

  4. 「完全なデバッグ情報」がまだ選択されていない場合は選択します。

  5. 「OK」をクリックしてダイアログを閉じます。

  6. デバッガを起動するには、次のいずれかの操作を行います。

    • 現在の実行構成を使用してデバッガを開始するには、メイン・メニューから「実行」<プロジェクト名>のデバッグ」を選択します。

    • 実行構成を選択してデバッガを起動するには、ツールバーの「デバッグ」アイコンの横のドロップダウン・メニューから必要な実行構成の名前をクリックします。

プロジェクトのビルドに成功すると、デバッガが起動します。

19.6.7 デバッグ情報をファイルにエクスポートする方法

JDeveloperのデバッガによって生成されたデバッグ情報は、デバッガ・ウィンドウのいずれかからテキスト出力ファイルまたはHTML出力ファイルにエクスポートできます。

デバッグ情報をファイルにエクスポートするには、次のようにします。

  1. ツールバーで「デバッグ」をクリックし、デバッグを開始します。

  2. デバッガがブレークポイントで停止すると、エクスポートする情報が含まれているデバッガ・ウィンドウを見つけます。

  3. デバッガ・ウィンドウで右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。

  4. 該当する「プリファレンス - デバッガ」ページの「列」の下で、「デバッガ」ウィンドウおよび出力ファイルで表示または非表示にする列を選択します。「OK」をクリックして「プリファレンス」ダイアログを閉じます。

  5. デバッガ・ウィンドウで右クリックし、「エクスポート」を選択します。

  6. 「エクスポート」ダイアログで、ファイルの名前を入力します。出力ファイルはテキスト・ファイルとして保存され、列の間にはタブが、行の間には改行が挿入されます。HTMLファイルにエクスポートする場合は、.html拡張子または.htm拡張子(大/小文字の区別なし)を追加します。

プロジェクトのビルドに成功すると、デバッガが起動します。

19.6.8 デバッグ時のソース・エディタの使用方法

(ブレークポイントで、ステップ・コマンド完了後、または一時停止によって)デバッガが停止すると、ソース・エディタに現在のクラスのソース・ファイルが開き、図19-1に示すように実行ポイントが示されます。

図19-1 「実行ポイント」アイコン

実行ポイント

デバッグ中にクラスのソース・ファイルが見つからない場合、「ソース・ファイルが見つかりません」ダイアログが表示され、ソース・ファイルの場所の入力を求めるメッセージが表示されます。

ソース・エディタは、次のようにデバッグに使用できます。

  • ブレークポイントを設定するには、ソース・エディタのマージンをクリックします。

  • ブレークポイントを削除するには、ソース・エディタのマージンでブレークポイントをクリックします。

    図19-2 「ブレークポイント」アイコン

    「ブレークポイント」アイコン

ポップアップ・メニュー項目の使用

デバッガにより、ソース・エディタのポップアップ・メニューには表19-2に示すようなメニュー項目が追加されます。

表19-2 ポップアップ・メニュー項目

項目 機能

カーソルまで実行

カーソルの現在位置まで実行し、その位置に到達するまでコードを実行できます。

監視式([Ctrl]+[F5])

「監視式」ウィンドウに式を追加できます。

インスペクト

「インスペクタ」ウィンドウを開くことができます。

カーソル位置のトレース実行メソッド

「カーソルまで実行」を実行してから、現在のカーソル位置にあるメソッドをトレース実行します。


ツールチップの使用

データ項目の名前の上にポインタを置くと、デバッガによりソース・エディタにツールチップが表示されます。デフォルトでは、ツールチップにデータ項目の名前、値、タイプが表示され、「データ」ウィンドウまたは「監視式」ウィンドウに追加することなく、データ項目を簡単にインスペクトできます。データ項目が配列またはオブジェクトの場合は、オブジェクト階層の下位にある、選択した項目の子もインスペクトできます。ツールチップに表示される子データ項目は20個までで、残りのデータ項目を表示するにはナビゲーション・ボタンを使用してください。

このツールチップに表示される列は、「ツール」「プリファレンス」→「デバッガ」→「ツールチップ」ページで有効にした列設定によって異なります。

プロジェクトのビルドに成功すると、デバッガが起動します。

19.6.9 デバッガでのJava式の使用方法

Java式は、監視式ウィンドウ、インスペクタ・ウィンドウ、ブレークポイント条件、ブレークポイント・ログ式で使用されます。デバッガでは、表19-3に示した形式のJava式を使用できます。

表19-3 デバッガで使用できるJava式

Java式 Form

単純変数名

rect

フィールド・アクセス

rect.width

メソッド・コール

myString.length()

配列要素

myArray[3]

配列長さ

myArray.length

比較演算

rect.height == 100
myArray.length > 7

算術演算

rect.width * rect.height
x + y + z

論理演算

frame1.enabled && frame1.visible

textField1.hasFocus || textField2.hasFocus

演算子のインスタンス

<my_value> instanceof java.lang.String

シフト演算子

x << 2

y >> 1

バイナリ演算子

keyEvent.modifiers & java.awt.event.InputEvent.CTRL_MASK

疑問符とコロンを使用した演算

y>5 ? y*7 : y*4

staticフィールド名

java.awt.Color.pink

完全修飾クラス名

java.awt.Color


プロジェクトのビルドに成功すると、デバッガが起動します。

19.6.10 デバッグ中のコード内の移動

JDeveloperのデバッガでは、プログラムの実行を制御できます。つまり、プログラムの1コード行、メソッド全体またはプログラム・ブロック全体を実行するかどうかを制御できます。プログラムの実行と一時休止のタイミングを手動で制御することにより、正常に機能していることがわかっているセクションを素早く通過し、問題の原因となっているセクションに集中できます。詳細は、第19.6.5項「デバッガ開始オプションの設定方法」を参照してください。

デバッガでは、プログラムの実行を次の方法で制御できます。

  • メソッドのトレース実行

  • メソッドのステップ実行

  • トレースするクラスの制御

  • スレッドの実行ポイントの検索

  • カーソル位置まで実行

  • デバッガの一時停止および再開

  • デバッグ・セッションの終了

「トレース実行」および「ステップ実行」コマンドを使用すると、プログラム・コードを簡単に移動できます。2つのコマンドはよく似ていますが、コード実行の制御方法は異なります。

プログラムの実行単位は、最小で1コード行ずつ増やすことができます。1行に複数のプログラム文がある場合、1コード行として処理されます。1行に含まれる複数の文を個別にデバッグすることはできません。1行を1文で構成すると、最も簡単です。この方法を使用するとコードがわかりやすくなり、管理も容易です。

19.6.11 メソッドのトレース実行

「トレース実行」コマンドでは、1回に1つずつプログラム文が実行されます。実行ポイントがメソッドのコール上にあるときに「トレース実行」コマンドを選択すると、そのメソッドがトレース実行され、実行ポイントはメソッドの最初の文上に置かれます。

実行ポイントがメソッドの最後の文上にあるときに「トレース実行」を選択すると、デバッガはそのメソッドから戻り、実行ポイント()はそのメソッドのコールに続くコード行上に置かれます。

シングル・ステップ実行とは、「トレース実行」を使用して、プログラム・コードの文を連続して実行することを指します。

次のいずれかの方法で、メソッドをトレース実行できます。

  • 「実行」「トレース実行」を選択します。

  • [F7]キーを押します。

  • ツールバーの「トレース実行」ボタンをクリックします。

    図19-3 「トレース実行」ボタン

    「トレース実行」アイコン

以前のリリースのJDeveloperとは異なり、「トレース実行」ボタンをクリックしてデバッグを開始することはできません。「トレース実行」は、すでに開始されているデバッグ・プロセスでのみ機能します。

デバッガをトレース実行で開始するように設定すると、デバッガによって、デバッグ対象のプログラムがトレース可能なクラスのメソッドに達するまで実行されます。

デバッグ時は、一部のメソッドをトレース実行し、他のメソッドをステップ実行できます。メソッドが正常に機能し、メソッドのコールによってエラーが発生しないことがわかっている場合は、そのメソッドのコールをステップ実行します。メソッドが正常に機能するかどうかわからない場合は、メソッドをトレース実行し、正常に機能するかどうかをチェックします。

19.6.12 メソッドのステップ実行

「ステップ実行」コマンドでは、「トレース実行」コマンドと同様、1回に1つずつプログラム文を実行できます。ただし、実行ポイントがメソッド・コール上にあるときに「ステップ実行」コマンドを発行すると、そのメソッドは停止せずに実行され(トレース実行されません)、実行ポイントはそのメソッド・コールに続く文上に置かれます。

実行ポイントがメソッドの最後の文上にあるときに「ステップ実行」を選択すると、デバッガはそのメソッドから戻り、実行ポイントはそのメソッドのコールに続くコード行上に置かれます。

次のいずれかの方法で、メソッドをトレース実行できます。

  • 「実行」「ステップ実行」を選択します。

  • [F8]キーを押します。

  • ツールバーの「ステップ実行」ボタンをクリックします。

    図19-4 「ステップ実行」ボタン

    「ステップ実行」ボタン

以前のリリースのJDeveloperとは異なり、「ステップ実行」ボタンをクリックしてデバッグを開始することはできません。「ステップ実行」は、すでに開始されているデバッグ・プロセスでのみ機能します。

ステップ実行で開始するように設定した場合、デバッガによって、トレース可能なクラスのメソッドに達するまでデバッグ対象のプログラムが実行されますが、クラスのstaticイニシャライザ・メソッドでは停止しません。

デバッグ時は、一部のメソッドをトレース実行し、他のメソッドをステップ実行できます。メソッドが正常に機能し、メソッドのコールによってエラーが発生しないことがわかっている場合は、そのメソッドのコールをステップ実行します。メソッドが正常に機能するかどうかわからない場合は、メソッドをトレース実行し、正常に機能するかどうかをチェックします。

19.6.13 トレースするクラスの制御

通常、デバッグを開始する前に、プロジェクト・プロパティでトレースの対象リストと対象外リストを設定する必要があります。ただし、トレースの対象リストと対象外リストを変更する必要がある場合は、クラス・ウィンドウから変更できます。クラス・ウィンドウを右クリックし、ポップアップ・メニューから「トレース」を選択します。「トレース」ダイアログが表示され、トレースの対象リストと対象外リストを修正できます。

パッケージをトレースの対象または対象外として指定すると、そのパッケージ内の下部クラスも、個別に指定した場合を除いてトレースの対象または対象外となります。

プログラムの一部を詳しく調べるために、デバッガでステップ実行するファイルに対してのみトレースを有効にすることができます。たとえば、通常J2SEライブラリ内のクラスのトラブルシューティングは行わないので、これらをトレースする必要はありません。通常は独自に作成したクラスのみトレースします。

19.6.14 トレース・リストに基づく動作のステップ実行方法

クラスまたはパッケージを対象外とした場合、そのクラスをステップ実行するように指定しても、デバッガは一時休止することなくそのコードを通過します。デバッガは、対象となっているクラスの次のコード行で一時休止します。トレースの対象リストおよび対象外リストは、「トレース実行」、「ステップ実行」、「ステップ・アウト」を含むすべてのステップ・コマンドで使用されます。これらのリストを使用する場合も、対象外のクラスにブレークポイントを設定できます。デバッガがそのようなブレークポイントで停止しても、ステップ・コマンドは無効です。

クラスのトレースを有効にするには、次の方法でクラスまたはパッケージを対象または対象外に指定して、トレースの対象リストまたは対象外リストを修正します。

  1. ナビゲータでプロジェクトを右クリックし、ポップアップ・メニューから「プロジェクト・プロパティ」を選択します。

  2. 「実行/デバッグ/プロファイル」ノードを選択します。

  3. 実行構成を選択し、「編集」をクリックします。

  4. 「実行コンフィギュレーションの編集」ダイアログで、「デバッガ」ノードを選択します。

  5. 「対象とするクラス/パッケージのリスト」および「対象外のクラス/パッケージのリスト」パラメータの該当するフィールドに、対象または対象外とするパッケージやクラスの名前をセミコロン(;)で区切って入力します。

    代替方法としては、「編集」をクリックして、「対象とするクラス/パッケージのリスト」/「対象外のクラス/パッケージのリスト」ダイアログを開き、「追加」または「削除」をクリックします。「追加」をクリックすると、「クラスおよびパッケージ・ブラウザ」ダイアログが表示されます。「削除」をクリックすると、クラスまたはパッケージが該当するトレース・リストから削除されます。追加するクラスまたはパッケージに移動し、「OK」をクリックしてください。クラスまたはパッケージが該当するトレース・リストに追加されます。

対象リストを空にすると、対象外リストで個別に指定したパッケージを除くすべてのパッケージをトレースするように指定されます。次に例を示します。

include:
exclude:java;javax

19.6.15 スレッドの実行ポイントの検索方法

デバッグ中は、現在のスレッドで現在実行ポイントとなっているコード行がハイライト表示され、ソース・エディタの左マージンに実行ポイント・アイコンが表示されます。

実行ポイントは、デバッガによって実行される次のソース・コード行を示します。

現在の実行ポイントを検索するには、次のようにします。

  1. メイン・メニューから「実行」「実行ポイントの検索」を選択します。

  2. 「スレッド」ウィンドウでスレッドを右クリックし、スレッドのソースに移動を選択します。

    ソース・エディタに実行ポイントを含むコードのブロックが表示されます。

19.6.16 カーソル位置までの実行方法

デバッガでアプリケーション・コードをステップ実行する場合、特定の場所まではシングル・ステップ実行やブレークポイント設定をすることなく実行した方がよい場合があります。

プログラムの特定の場所まで実行するには、次のようにします。

  1. ソース・エディタで、デバッガを停止するコード行にテキスト・カーソルを置きます。

  2. 次のいずれかの方法で、カーソル位置まで実行します。

    • ソース・エディタで、右クリックして「カーソルまで実行」を選択します。

    • メイン・メニューから「実行」「カーソルまで実行」オプションを選択します。

    • [F4]キーを押します。

次のいずれかの状態になります。

  • カーソルまで実行する場合、プログラムは、ソース・エディタでテキスト・カーソルが置かれた場所に達するまで停止することなく実行されます。

  • テキスト・カーソルが置かれているコード行が実際には実行されない場合、「カーソル位置まで実行」コマンドを選択すると、プログラムはブレークポイントに達するまで、またはプログラムが終了するまで実行されます。

19.6.17 デバッガの一時停止および再開方法

デバッガでプログラムを実行中、プログラムを一時休止できます。その後、デバッガを使用して、プログラムのこの部分に関して状態を確認できます。プログラムの該当部分の確認を終了すると、プログラムの実行を継続できます。

デバッガの使用中、プログラムは実行中またはデバッガによって一時休止中のどちらかの状態になります。プログラムがユーザー入力を待機している場合は、実行中とみなされます。プログラムが実行中の場合、「一時休止」を使用できます。プログラムがデバッガによって一時停止中の場合、「再開」「ステップ実行」「トレース実行」を含むデバッガ・ボタンを使用できます。

デバッガは次の方法で一時停止できます。

  • メイン・メニューから「実行」「プログラムの停止」を選択します。

  • デバッガのツールバーから「プログラムの停止」アイコンをクリックします。

    図19-5 「プログラムの停止」アイコン

    「プログラムの停止」アイコン

プログラムは、ソースを使用できない場所で一時休止することがあります。この場合、「ソース・ファイルが見つかりません」ダイアログが表示され、ソース・ファイルの場所、またはスタブ・ファイルを生成するかどうかを指定するよう求められます。

また、クラスがトレースの対象外リストに含まれているためにトレースが無効な場所でプログラムが一時休止することがあります。たとえば、java.lang.Object.waitメソッドで一時停止するような場合があります。

デバッガの一時休止中に、ガベージ・コレクションを強制的に実行できます。ガベージ・コレクションの結果は、ただちにクラス・ウィンドウおよびヒープ・ウィンドウに反映されます。これにより、アプリケーションのメモリー・リークを検出できます。

一時停止したデバッガを再開するには、「実行」「再開」を選択します。

19.6.18 デバッグ・セッションの終了方法

場合によりデバッグ中に、プログラムを最初から再起動する必要があります。たとえば、不具合のある箇所を通過してしまった場合、プログラムを再起動します。

現在のデバッグ・セッションを終了するには、次のようにします。

  • 「実行」<プログラム名>の終了を選択します。または、

  • デバッガのツールバーで「終了」をクリックします。

デバッグ・セッションを終了すると、すべてのデバッガ・ウィンドウが閉じます。ただし、この処理によって、設定したブレークポイントや監視式が削除されることはありません。このため、デバッグ・セッションを簡単に再開できます。

19.6.19 デバッガ・ログの表示方法

デバッガ・ログには、デバッグ・プロセスに関する情報が表示されます。デバッガ・ログは、デバッグ対象のプロセスがアクティブである間はいつでも表示できます。

プロセスがアクティブである間にデバッガ・ログを表示するには、次のいずれかの方法を使用します。

  • 「表示」メニューで「デバッガ」を選択し、次に「ログ」を選択します。

  • 「Run Manager」で、プロセスを右クリックし、表示されるポップアップ・メニューで「ログの表示」を選択します。

19.6.20 アプレットのデバッグ方法

JDeveloperでは、アプレット・プログラムのデバッグ方法を制御できます。

アプレットをデバッグするには、次のようにします。

  1. ナビゲータで、<APPLET>タグを含むHTMLファイルを選択します。

  2. ツールバーの「デバッグ」をクリックします。

    アプレットが起動します。デバッガは、アプレットのソース・コードで設定したブレークポイントで停止します。

19.6.21 JavaScriptプログラムのデバッグ方法

JDeveloperでは、リモート・デバッグのためのブラウザの設定など、JavaScriptプログラムのデバッグ方法を制御できます。

JDeveloperでJavaScriptデバッガ・オプションを設定するには、次のようにします。

  1. どのプロジェクトにも適用される作業環境を設定するために、「アプリケーション」「デフォルト・プロジェクト・プロパティ」を選択するか、または現在のプロジェクトにのみ適用される作業環境を設定するために、「アプリケーション」「プロジェクト・プロパティ」を選択します。

  2. 「実行/デバッグ/プロファイル」ノードを選択します。

  3. 実行構成を選択します。詳細は、第19.3項「プロジェクトを実行用に設定する方法」を参照してください。

  4. 「編集」をクリックします。

  5. 「起動設定」で「JavaScript」ノードを選択します。

  6. ブラウザを選択します。

    「FireFox/Mozilla」を選択すると、JavaScriptデバッグを制御するオプションが追加で表示されます。JDeveloperでデバッグ用のブラウザとしてまだFirefoxを設定していない場合は、次の手順に従います。

    • Firefoxブラウザ実行可能ファイル(firefox.exe)のパスを、「ブラウザのコマンドライン」に入力するか、「参照」をクリックして実行可能ファイルを選択します。

    • 「ブラウザでのデバッグ対象の拡張のインストール」ボタンをクリックすると、デバッグ拡張機能がFirefoxにインストールされます。Firefoxでページが開き、拡張機能をインストールするためのリンクが表示されます。OracleJSDebugAgent for Windowsのインストール・リンクをクリックすると、Oracle Javascript Debug Agent拡張機能がインストールされます。Firefoxを再起動してインストールを完了します。

  7. 「OK」をクリックして「実行構成の編集」ダイアログを閉じ、「プロジェクト・プロパティ」ダイアログも閉じます。

JavaScriptプログラムをデバッグするには、次のようにします。

  1. アプリケーション・ナビゲータで、JavaScriptのノードを含むHTML/JSP/JSファイルを選択します。

  2. 右クリックして、ポップアップ・メニューから「デバッグ」を選択します。

  3. 「ターゲットの起動方法」ダイアログで、JSファイル、またはサーバー・プログラミングを伴わないHTMLファイルをデバッグする場合は、「ブラウザでサーバー・インスタンスが開始されていません」を選択します。JSPファイル、またはサーバー・プログラミングを伴うHTMLファイルをデバッグする場合は、「サーバー・インスタンス内」を選択します。「OK」をクリックします。

    Firefoxブラウザでプログラムが起動し、JDeveloperではソース・コードに設定した最初のブレークポイントでデバッガが停止します。

19.7 デバッガ・ウィンドウの使用方法

JDeveloperでは、コードの分析に役立つ、特定の用途向けのデバッグ・ウィンドウが数多く提供されます。

19.7.1 「ブレークポイント」ウィンドウの使用方法

ブレークポイントの設定に関する情報は、ブレークポイント・ウィンドウで参照できます。ポップアップ・メニュー・オプションなど、ブレークポイント・ウィンドウの詳細は、[F1]を押してください。

設定されたブレークポイントを一覧表示する「ブレークポイント」ウィンドウを開くには、次のようにします。

  • メイン・メニューから「表示」「デバッガ」「ブレークポイント」を選択します。ブレークポイント・ウィンドウが表示されます。

ブレークポイント・ウィンドウに表示する列を変更するには、次のようにします。

  • 「ブレークポイント」ウィンドウで右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、ブレークポイント・ウィンドウに表示する列を選択します。

  • または、「ブレークポイント」ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

19.7.2 「スマート・データ」ウィンドウの使用方法

現在のメソッドのすべての引数、ローカル変数およびstaticフィールドが表示されるデータ・ウィンドウとは異なり、スマート・データ・ウィンドウには、ステップ実行しているソース・コードに関連のあるデータのみ表示されます。具体的には、デバッガにより実行ポイント()付近のソース・コードが分析され、ステップ実行しているコード行で使用されている変数、フィールドおよび式が検索されます。

詳細は、第19.6.15項「スレッドの実行ポイントの検索方法」を参照してください。

また、非voidメソッドでブレークポイントを設定し、「メソッドの最後まで実行」コマンドまたは「ステップ・アウト」コマンドを発行した場合、スマート・データ・ウィンドウには非voidメソッドの現在の戻り値が表示されます。「ステップ実行」または「トレース実行」コマンドでは戻り値は表示されません。

デフォルトでは、1箇所につき1コード行のみ分析され、最大2箇所が分析されます。これらの設定は、「ツール」「プリファレンス」→「デバッガ」→「スマート・データ」ページで調整できます。このページは、「スマート・データ」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択して表示することもできます。

「スマート・データ」ウィンドウを開くには、次のようにします。

  1. ソース・エディタでブレークポイントを設定し、デバッグ・セッションを開始します。

  2. ツールバーから「デバッグ」をクリックします。

  3. デバッガがブレークポイントに達したときに、「表示」「デバッガ」「スマート・データ」を選択します。

スマート・データ・ウィンドウに表示する列を変更するには、次のようにします。

  • 「スマート・データ」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、スマート・データ・ウィンドウに表示する列を選択します。

  • あるいは、スマート・データ・ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

プロジェクトのビルドに成功すると、デバッガが起動します。

19.7.3 「データ」ウィンドウの使用方法

データ・ウィンドウを使用して、プログラムの変数に関する情報を表示します。データ・ウィンドウには、現在のコンテキストの引数、ローカル変数およびstaticフィールドが表示されます。現在のコンテキストはスタック・ウィンドウでの選択によって決まります。新しいコンテキストに移動すると、データ・ウィンドウが更新され、新しいコンテキストのデータが表示されます。現在のクラスがデバッグ情報なしでコンパイルされた場合、ローカル変数を表示することはできません。デバッガによってスタック・フレームのローカル変数のメモリー位置が分析され、可能な範囲の情報が表示されます。


注意:

プログラムのデバッグ中、デフォルトでは「データ」ウィンドウにローカル変数情報が表示されます。「データ」ウィンドウでローカル変数情報を無効にするには、「プロジェクト・プロパティ」ダイアログの「コンパイラ」ページで「完全なデバッグ情報」の選択を解除します。デフォルトでは、「完全なデバッグ情報」チェック・ボックスが選択されています。


また、非voidメソッドでブレークポイントを設定し、「メソッドの最後まで実行」コマンドまたは「ステップ・アウト」コマンドを発行した場合、データ・ウィンドウには非voidメソッドの現在の戻り値が表示されます。「ステップ実行」または「トレース実行」コマンドでは戻り値は表示されません。

データ・ウィンドウを開くには、次のようにします。

  1. ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。

  2. ツールバーで「デバッグ」をクリックします。

  3. デバッガがブレークポイントで一時停止しているときに、メイン・メニューから「表示」「デバッガ」「データ」を選択します。

「データ」ウィンドウで配列要素を表示するには、次のようにします。

  1. プロジェクトのデバッグを開始し、「データ」ウィンドウを開きます。

  2. 「データ」ウィンドウで配列を選択し、展開して配列の要素を表示します。配列に20個を超える要素が含まれている場合、「データ」ウィンドウには最初の20個の要素が表示されます。

    • 次の20個のエントリを表示するには、「次へ」をクリックします。

    • 前の20個のエントリを表示するには、「前へ」をクリックします。

    • 最初の20個のエントリを表示するには、「先頭へ」をクリックします。

    • 最後の20個のエントリを表示するには、「最後へ」をクリックします。

    • デフォルトの表示制限を20から変更する場合には、配列を選択して右クリックし、ポップアップ・メニューから「範囲の調整」を選択して、「新しいカウント」フィールドに新しい値を入力します。完了したら、「OK」をクリックします。

データ・ウィンドウに表示する列を変更するには、次のようにします。

  • 「データ」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、「データ」ウィンドウに表示する列を選択します。

  • または、データ・ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

プロジェクトのビルドに成功すると、デバッガが起動します。

19.7.4 「監視式」ウィンドウの使用方法

監視式を使用すると、プログラムの実行に従って変化する、変数および式の値を監視できます。監視式を入力すると、「監視」ウィンドウに式の現在の値が表示されます。プログラムの実行時、プログラムによって監視式の変数の値が更新されるため、監視の値が変化します。

監視は、「スタック」ウィンドウでの選択内容によって制御される現行のコンテキストに従って、式を評価します。新しいコンテキストに移動すると、式は新しいコンテキストで再評価されます。監視式の変数が定義されていない場所に実行ポイントが移動すると、監視式全体が未定義になります。監視式を評価できる場所に実行ポイントが戻ると、「監視」ウィンドウに再び監視式の値が表示されます。

監視式ウィンドウを開くには、次のようにします。

  1. ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。

  2. ツールバーから「デバッグ」をクリックします。

  3. デバッガがブレークポイントで一時停止しているときに、メイン・メニューから「表示」「デバッガ」「監視式」を選択します。

監視式ウィンドウに表示する列を変更するには、次のようにします。

  1. 「監視式」ウィンドウで右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、「監視式」ウィンドウに表示する列を選択します。

  2. あるいは、「監視式」ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

監視式を追加するには、次のようにします。

  • 「データ」ウィンドウで項目を右クリックし、ポップアップ・メニューから「監視式」を選択します。

  • データ・ウィンドウから監視式ウィンドウに変数、フィールドおよびオブジェクトをドラッグ・アンド・ドロップします。

  • ソース・エディタでテキストを選択し、右クリックして、ポップアップ・メニューから「監視式」を選択します。

staticフィールドを監視するには、次のようにします。

後ろにピリオド(.)とフィールド名を付けたクラスのフルネームを入力します。次に例を示します。

java.io.File.separator

例外ブレークポイントで停止中に現在の例外を監視するには、次のように入力します。

_throw

19.7.5 「インスペクタ」ウィンドウの使用方法

インスペクタ・ウィンドウでは、特定の変数、フィールドまたはオブジェクトを選択し、監視式ウィンドウまたはデータ・ウィンドウに表示される情報と同じ情報を表示できます。ポップアップ・メニュー・オプションなど、インスペクタ・ウィンドウの詳細は、インスペクタ・ウィンドウで[F1]を押してください。

インスペクタ・ウィンドウは、デフォルトで浮動するという点で他のウィンドウとは多少異なり、インスペクタ・ウィンドウの複数のインスタンスを使用できます。各インスペクタ・ウィンドウにデータ項目が1つ含まれます。インスペクタ・ウィンドウを別のインスペクタ・ウィンドウにドラッグしてドッキングできます。

インスペクタ・ウィンドウを開くには、次のようにします。

  1. ソース・エディタで少なくとも1つのブレークポイントを設定します。

  2. ツールバーから「デバッグ」をクリックします。

  3. デバッガがブレークポイントに達したときは、ソース・エディタで変数を選択し、右クリックして「インスペクト」を選択します。

    選択した変数を含むインスペクト・フローティング・ウィンドウが表示されます。他の項目を調べる場合は、テキスト・フィールドに新しい式または変数を入力するか、ドロップダウン・リストから前に選択した項目を選択します。

    変数または式が選択されていない場合、インスペクト・ダイアログには、エディタ内のカーソルの下にあるテキストが、調べる式として事前に表示されます。インスペクタ・ウィンドウを開くには、「OK」をクリックします。

インスペクタ・ウィンドウが画面中央にフローティング・ウィンドウとして表示されますが、インスペクタ・ウィンドウを他のウィンドウとともにドッキングできます。ドッキングしないようにするには、[Ctrl]キーを押しながら「インスペクタ」ウィンドウを移動します。インスペクタは、「スタック」ウィンドウの現在のコンテキストに応じて式を評価します。詳細は、第19.7.7項「「スタック」ウィンドウの使用方法」を参照してください。

新しいコンテキストに移動すると、その新しいコンテキストに対して式が再評価されます。式の変数が定義されていない新しい場所に実行ポイントが移動すると、式全体が未定義になります。実行ポイントが式を評価できる場所に戻ると、その式の値が再度表示されます。

インスペクタ・ウィンドウに表示する列を変更するには、次のようにします。

  • 「インスペクタ」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、「インスペクタ」ウィンドウに表示する列を選択します。

  • または、「インスペクタ」ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

19.7.6 「ヒープ」ウィンドウの使用方法

ヒープ・ウィンドウには、デバッグ中のプログラム内のヒープに関する情報が表示されます。このウィンドウは、プログラムのメモリー・リークの検出に役立ちます。クラスのすべてのインスタンスとオブジェクトのガベージ・コレクションが行われなかった理由を表示できます。

「ヒープ」ウィンドウには次の2種類のフォルダが表示されます。

  • 「クラス」フォルダ

    クラス名、メモリーに存在するクラスのインスタンス数が表示され、展開すると、ヒープの特定のインスタンスおよびそのアドレスが一覧表示されます。

  • 参照パス・フォルダ

    直接または間接的に特定オブジェクトを指すすべてのルート参照が含まれます。ルート参照は、staticフィールド、スタック変数、確保済オブジェクトです。ルート参照がある場合、オブジェクトはガベージ・コレクタによって破棄されません。ルート参照を展開すると、ルート参照から指定したオブジェクトまでの参照パスが表示されます。

ヒープ・ウィンドウを開くには、次のようにします。

  1. ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。

  2. ツールバーで「デバッグ」をクリックします。

  3. デバッガがブレークポイントに達したときに、メイン・メニューから「表示」「デバッガ」「ヒープ」を選択します。

  4. 「ヒープ」ウィンドウを右クリックし、ポップアップ・メニューから「新規タイプの追加」を選択します。クラス・ウィンドウからヒープ・ウィンドウに「クラス」ノードをドラッグする方法もあります。または、「クラス」ウィンドウで「クラス」ノードを右クリックし、ポップアップ・メニューから「ヒープ・ウィンドウに表示」を選択します。クラスに関する情報がヒープ・ウィンドウに表示されます。

ヒープ・ウィンドウに表示する列を変更するには、次のようにします。

  • 「ヒープ」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、「ヒープ」ウィンドウに表示する列を選択します。

  • あるいは、ヒープ・ウィンドウで列ヘッダーを右クリックし、ポップアップ・メニューで必要な列名を選択します。

19.7.7 「スタック」ウィンドウの使用方法

スタック・ウィンドウには、現在のスレッドのコール・スタックが表示されます。スタック・ウィンドウで行をハイライト表示すると、データ・ウィンドウ、監視式ウィンドウおよびすべてのインスペクタ・ウィンドウが更新され、選択したすべてのメソッドのデータが表示されます。

スタック・ウィンドウを開くには、次のようにします。

  1. ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。

  2. ツールバーから「デバッグ」をクリックします。

  3. デバッガがブレークポイントで一時停止しているときに、メイン・メニューから「表示」「デバッガ」「スタック」を選択します。

スレッドのスタックを表示するには、次のようにします。

  1. プロジェクトのデバッグを開始し、「スタック」ウィンドウを開きます。

  2. ドロップダウン・リストから、列の上のスレッドを選択します。「スタック」ウィンドウには、選択したスレッドのスタックがすぐに反映されます。

スタック・ウィンドウに表示する列を変更するには、次のようにします。

  1. 「スタック」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、「スタック」ウィンドウに表示する列を選択します。

  2. あるいは、スタック・ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

19.7.8 「クラス」ウィンドウの使用方法

クラス・ウィンドウには、ロードされたクラスが表示されます。また、クラスのインスタンス数などの有益な情報も表示される場合があります。Javaガベージ・コレクタを強制的に実行できるように、デバッガにはクラス・ウィンドウとともにガベージ・コレクション・ツールも含まれています。ガベージ・コレクタを実行すると、その影響がクラス・ウィンドウに即座に表示されます。デバッガでガベージ・コレクタを使用できる仮想マシンを使用している場合のみ、ガベージ・コレクタを強制的に実行できます。

クラス・ウィンドウを開くには、次のようにします。

  1. ソース・エディタでブレークポイントを設定し、デバッグ・セッションを開始します。

  2. デバッガがブレークポイントに達したときに、「表示」「デバッガ」「クラス」を選択します。

    クラス・ウィンドウに、現在ロードされているすべてのクラス、そのクラスで使用中のインスタンス数、およびその数のインスタンスに必要なメモリー容量が表示されます。

クラス・ウィンドウに表示される情報を選択するには、次のようにします。

  • 「クラス」ウィンドウで項目を右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、クラス・ウィンドウに表示する列を選択します。

  • あるいは、クラス・ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

表示の昇順と降順を変更するには、次のようにします。

  • 各列上部をクリックして、ソート順を変更します。次の項目でソートできます。

    • 名前

    • カウント

    • メモリー

    • ファイル

「パッケージを表示」チェック・ボックスが選択されている場合、デフォルトでクラスがツリー構造で表示され、各ブランチがパッケージを表します。アイコンおよび各クラスまたはパッケージの隣にあるエントリは、クラスがトレースに含まれているか除外されているかを示します。行番号表のないクラスの特殊なアイコン(図19-6)は、クラスが取り除かれたか曖昧なためにトレースが不可能であることを示します。

図19-6 トレース実行できないことを示すアイコン

トレース実行できないことを示すアイコン

「クラス」ウィンドウで、ポップアップ・メニューから「プリファレンス」を選択し、表示する列を次の使用可能なオプションから選択します。

  • カウント

  • メモリー

  • ファイル

19.7.9 「モニター」ウィンドウの使用方法

Javaでは、同期による言語レベルでのマルチスレッドがサポートされています。同期とは、複数スレッド間でアクティビティとデータ・アクセスを調整することです。Javaが同期のサポートに使用するメカニズムはモニターです。モニター・ウィンドウには、アクティブなモニターのステータスおよび制御情報が表示されます。

モニター・ウィンドウを開くには、次のようにします。

  1. ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。

  2. ツールバーで、「デバッグ」アイコンをクリックします。

  3. デバッガがブレークポイントで停止しているときに、「表示」「デバッガ」「モニター」を選択します。

「モニター」ウィンドウに表示される情報を選択するには、次のようにします。

  • 「モニター」ウィンドウの項目を右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、「クラス」ウィンドウに表示する列を選択します。

  • あるいは、モニター・ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

19.7.10 「スレッド」ウィンドウの使用方法

スレッド・ウィンドウには、プログラム内のすべてのスレッドおよびスレッド・グループの名前とステータスが表示されます。

スレッド・ウィンドウを開くには、次のようにします。

  1. ソース・エディタでソース・ファイルを開き、ブレークポイントを設定します。

  2. ツールバーから「デバッグ」をクリックします。

  3. デバッガがブレークポイントで停止しているときに、メイン・メニューから「表示」「デバッガ」「スレッド」を選択します。

    「ステップ実行」「トレース実行」および「次の文を設定」を含むステップ・コマンドは、現在のスレッドに適用されます。別のスレッドを選択するには、スレッドを右クリックし、ポップアップ・メニューから「スレッドの選択」を選択します。

    スレッド・ウィンドウでスレッドを選択すると、スタック・ウィンドウが自動的に更新され、選択したスレッドのスタックが表示されます。

スレッド・ウィンドウに表示する列を変更するには、次のようにします。

  • 「スレッド」ウィンドウを右クリックし、ポップアップ・メニューから「プリファレンス」を選択します。「列」で、「スレッド」ウィンドウに表示する列を選択します。

  • あるいは、スレッド・ウィンドウで列ヘッダーを右クリックし、必要な列名を選択します。

19.7.11 「デバッガ」ウィンドウの作業環境の設定方法

列のサイズ変更モードや表示する他のオプションなど、デバッガ・ウィンドウの様々な設定をカスタマイズできます。


ヒント:

デバッガをデバッグ対象プロセス(デバッグするプログラム)に接続できない場合は、接続再試行の設定値を上げてください。


デバッグ・ウィンドウの作業環境を設定するには、次のようにします。

  1. 「ツール」「プリファレンス」→「デバッガ」ページを選択します。

    デバッグ・パネルにカスタマイズ可能なフィールドが表示されます。

  2. 表示されるフィールドおよびオプションから選択します。

  3. 特定のデバッガ・ウィンドウのオプションを設定するには、「デバッガ」ノードを展開し、該当するウィンドウ・ノードをクリックします。たとえば、スマート・データ・ウィンドウに表示する列を変更する場合は、「スマート・データ」をクリックします。

  4. 必要に応じて、設定可能なオプションを編集します。

  5. 終了したら「OK」をクリックします。

19.8 ブレークポイントの管理

ブレークポイントはプログラム内のトリガーで、その箇所に達するとプログラムの実行が一時休止され、プログラム変数の一部またはすべての値を調べることができます。ソース・コードの問題が発生する可能性のある箇所にブレークポイントを設定することにより、デバッグの必要な箇所に達するまでプログラムを実行できます。プログラムの実行中にブレークポイントに達すると、プログラムは一時休止し、デバッガのソース・エディタにブレークポイントを含む行が表示されます。デバッガを使用してプログラムの状態を表示できます。ブレークポイントは、プログラムの実行を開始する前やデバッグ中など、いつでも設定できます。図19-7 に、Javaアプリケーションのソース・ファイルにおけるブレークポイントの例を示します。

図19-7 ソース・エディタでのブレークポイント

ソース・エディタでのブレークポイント

コードのコメント行、空白行、宣言およびその他実行不可能な行で設定されたブレークポイントは無効となり、デバッガでは検証されません。

JDeveloperのデバッガでは、様々なタイプのブレークポイントがサポートされています。

デッドロック・ブレークポイントは、デッドロックのソースの場所を特定するのが困難な場合に便利です。デッドロック・ブレークポイントが検出されると、デバッガは停止します。デッドロック・ブレークポイントは、デバッグの開始時に自動的に有効になります。

ブレークポイントの設定に関する情報は、ブレークポイント・ウィンドウで参照できます。

19.8.1 確認済および未確認ブレークポイントについて

デバッグ中、ソース・エディタのコード行の左側でブレークポイントを設定できます。ただし、ブレークポイントを有効にするには、コードの実行可能な行に設定する必要があります。メソッドを初めて実行する前に、デバッガによりメソッドのすべての有効なブレークポイントが確認されます。コードのコメント行、空白行、宣言およびその他実行不可能な行で設定されたブレークポイントは無効となり、デバッガでは検証されません。

ブレークポイントが有効であると確認されると、ソース・エディタのマージンおよび「ブレークポイント」ウィンドウに表示されるアイコンが図19-8に変化します。

図19-8 確認済の「確認済ブレークポイント」アイコン

確認済ブレークポイント

19.8.2 デッドロックの理解

デッドロックは、プログラム内の1つ以上のスレッドがリソースにアクセスできなくなるか、待機状態のままいつまでも処理できない場合に発生します。Javaでの一般的なデッドロックは、モニター・ブロック・サイクル・デッドロックです。

モニター・ブロック・サイクル・デッドロックは、複数のスレッドが、他のスレッドがすでに実行中の同期コードを実行するために待機し、処理ができなくなる場合に発生します。

例19-2に、典型的なJavaの同期デッドロックを示します。

例19-2 Javaの同期デッドロック

synchronized (a) 
 {
 ...
 synchronized (b)  {
 ...
  }
  ...
 }

同時に、スレッド2は次のコードを実行しています。

synchronized (b) 
{
...
  synchronized (b) 
  {
  ...
   }
   ...
 }  

スレッド2がsynchronized (b)を実行中、スレッド1がsynchronized (a)に入るとデッドロックが発生します。スレッド1は、スレッド2がsynchronized (b)を終了するまでsynchronized (b)に入ることができず、スレッド2は、スレッド1がsynchronized (a)を終了するまでsynchronized (a)に入ることができません。デッドロックは「デッドリ・エンブラス」とも呼ばれます。この例ではスレッドは2つですが、スレッドの数が3つ以上ある場合にも同じような状況が発生します。デッドロック・ブレークポイントでは、このようなタイプのデッドロックを検出できます。

1つのスレッドが特定のオブジェクトでwaitメソッドをコールし、他のスレッドがそのオブジェクトでnotifyメソッドをコールしない場合にもデッドロックが発生します。このタイプのデッドロックの最も一般的な原因はタイミングです。待機側のスレッドがwaitをコールする前に、通知側のスレッドがnotifyをコールした可能性があります。waitをコールする場合に注意が必要な点は、notifyが前に何度もコールされていたとしても、waitメソッドはnotifyがもう1度コールされるまで待機するという点です。また、待機しているスレッドがない場合、notifyはエラーを返しません。デッドロック・ブレークポイントでは、このタイプのデッドロックは検出できません。

プログラムがハングしている可能性がある場合は、デバッガで「プログラムの停止」をクリックしてプログラムを一時停止し、「モニター」ウィンドウを開きます。コードを調べて、待機しているスレッドを見つけます。最初のスレッドがwaitをコールする前に別のスレッドがnotifyをコールしている場合はデッドロックが発生しています。このタイプのデッドロックの検出は非常に困難です。他のどのスレッドがnotifyをコールしたかを検出するには、作成したコードをよく理解しておく必要があります。

19.8.3 デッドロック・ブレークポイントの理解

JDeveloperのデバッガでは、実行を開始すると永続デッドロック・ブレークポイントが設定されます。デッドロック・ブレークポイントは、デッドロックのソースの場所を特定するのが困難な場合に便利です。デバッガは、デッドロック・ブレークポイントに達すると停止します。デバッガは、前述のモニター・ブロック・サイクル・デッドロックを検出できます。モニター・ウィンドウは、デッドロックを処理する場合に有益です。

デッドロック・ブレークポイントには、次の特徴があります。

  • JDeveloperを使用するときに自動的に作成される永続ブレークポイントです。

  • 削除できませんが、無効にすることはできます。

  • モニター・ブロック・サイクル・デッドロックが検出されるとデバッガを一時休止します。モニター・ブロック・サイクル・デッドロックは、複数のスレッドが、他のスレッドがすでに実行中の同期コードを実行するために待機し、処理ができなくなる場合に発生します。

JDeveloperのデバッガでは、永続デッドロック・ブレークポイントが自動的に作成されます。このブレークポイントは、モニター・ブロック・サイクルが検出されるたびに発生します。永続ブレークポイントは削除できません。新規デッドロック・ブレークポイントの作成はできませんが、既存の永続デッドロック・ブレークポイントの編集は可能です。

デッドロック検出がサポートされていないJava Virtual Machineもあります。たとえば、HotSpot VMでは、デッドロック検出はサポートされていません。

19.8.4 グループ化されたブレークポイントの理解

ブレークポイントのグループ化によって、ブレークポイントのセットを有効にすることができます。デバッガがコードの特定の場所に達したときに、無効になっているブレークポイントまたはブレークポイントのグループを有効にするように指定できます。

たとえば、コードによってNullPointerExceptionが検出されるものの、コードが正しく動作しない場合があります。このとき、NullPointerExceptionが予想以上に頻繁に発生し、このためにデバッガが繰り返し停止しますが、これらのNullPointerExceptionの中にはコードにとって意味のないものが含まれているとします。この状況は、ブレークポイント・グループを作成し、このブレークポイントをグループに追加して、デバッグ中にデバッガがこのブレークポイントで停止しないようにブレークポイント・グループを無効にすることで解決できます。

次に、問題のあるNullPointerExceptionがスローされる直前に実行されるコードにソース・ブレークポイントを作成できます。ソース・ブレークポイントに対して、このブレークポイントが発生したときに、例外ブレークポイントを含むブレークポイント・グループを自動的に有効にする処理を設定できます。

19.8.5 ブレークポイントの編集方法

JDeveloperでは、ソース・コードに追加した後でもブレークポイントのオプションを編集できます。

ブレークポイントのオプションを表示および編集するには、次のようにします。

  1. 「ブレークポイント」ウィンドウが開かれていない場合は、メイン・メニューから「表示」「デバッガ」「ブレークポイント」を選択します。

  2. 「ブレークポイント」ウィンドウで、ブレークポイントを選択します。

  3. 右クリックして「編集」を選択するか、「ブレークポイント」ツールバーで「編集」アイコンをクリックします。

    「定義」タブ、「条件」タブおよび「処理」タブを含む「ブレークポイントの編集」ダイアログが表示されます。

  4. ブレークポイントのオプションに必要な変更を加えます。

  5. 変更を受け入れるには、「OK」をクリックします。

「ブレークポイントの編集」ダイアログでは、次のことを実行できます。

  • ブレークポイント・オプションを設定します。

  • ブレークポイントを適用するスレッドの設定

  • ブレークポイントのパスの回数の設定

  • ブレークポイント・グループへのブレークポイントの挿入

  • ブレークポイントが発生した際にデバッガで実行する処理の選択

ソース・エディタに配置されているブレークポイントを右クリックすると編集できます。

  1. ソース・エディタの左余白でブレークポイントのアイコンを右クリックします。

  2. 「ブレークポイントの編集」を選択します。

    「ブレークポイントの編集」ダイアログ・ボックスが表示され、ブレークポイントの定義を指定できます。

ソース・エディタでブレークポイントにカーソルを重ねる方法もあります。

  • エディタ・ウィンドウの左余白にあるブレークポイント・アイコンの上にマウス・カーソルを置きます。

    図19-9 「ブレークポイントの編集」ダイアログ

    「ブレークポイントの編集」ダイアログ

    図19-9に示すポップアップ・ダイアログが表示されます。

    このダイアログで、有効/無効、条件などブレークポイントの重要な属性の一部を編集できます。

19.8.6 ソース・ブレークポイントの設定方法

ソース・ブレークポイントは、ソース・コードで設定するブレークポイントで、デフォルトのブレークポイント・タイプです。

次のいずれかの方法で、ソース・ブレークポイントを設定できます。

  • ソース・エディタで、実行可能なコード行の隣の左マージンをクリックします。

  • ソース・エディタで、コード行の隣の左マージンを右クリックし、「ブレークポイントの設定」([F5])を選択します。

  • 「表示」「デバッガ」「ブレークポイント」を選択して、「ブレークポイント」ウィンドウを表示します。次に、このウィンドウの任意の場所を右クリックし、ポップアップ・メニューから「ブレークポイントの追加」を選択します。サブメニューで、ブレークポイント型として「ソース」を選択し、ダイアログにパッケージ、ソース・ファイル名、行番号情報を入力します。ソース・ファイル名には、ディレクトリ情報は指定しませんが、ファイルの拡張子を指定する必要があります。たとえば、次のように指定します。次に例を示します。

    Application1.java or MyWebApp.jsp
    

    通常は、デバッグを開始する前に少なくとも1つのブレークポイントを設定しますが、この作業は必須ではありません。デバッガでプログラムを実行中に、ブレークポイントを設定できます。ブレークポイントに達すると、プログラムは一時休止します。

19.8.7 ブレークポイントの動作の制御方法

ブレークポイントが発生した場合のデバッガの動作を制御できます。

ブレークポイントが発生した場合のデバッガの動作を制御するには、次のようにします。

  1. 「ブレークポイント」ウィンドウのツールバーで、「ブレークポイントの追加」をクリックするか、またはブレークポイントを選択して「編集」をクリックします。

  2. 「新規ブレークポイント」ダイアログまたは「ブレークポイントの編集」ダイアログで「処理」タブをクリックします。「処理」タブでは、次の動作を変更できます。

    • 実行の停止(デフォルト)

    • ビープ音

    • ブレークポイントの発生を記録(タグまたは式を入力)

    • ブレークポイントのグループを使用可にする

    • ブレークポイントのグループを使用不可にする

19.8.8 ブレークポイントを有効/無効にする方法

ブレークポイントを無効にすると、ブレークポイント設定の定義はすべてそのままですが、プログラムの実行時にブレークポイントがトリガーされません。プログラムは無効なブレークポイントでは停止しません。現在は使用しないが、後で必要になるブレークポイントを定義した場合は、ブレークポイントを無効にすると便利です。

ブレークポイントを無効にするには、次のようにします。

  • ソース・エディタで、左マージンにあるブレークポイント記号を右クリックし、「ブレークポイントを無効化」を選択します。

  • 「ブレークポイント」ウィンドウ(「表示」「デバッガ」「ブレークポイント」)で、無効にするブレークポイントを右クリックして「無効化」を選択します。

  • 「ブレークポイント」ウィンドウでブレークポイントのグループを無効にするには、無効にするグループを選択し、右クリックして「グループを無効化」を選択します。

    また、「ブレークポイント」ツールバーからブレークポイントを無効にすることもできます。ブレークポイントまたはブレークポイント・グループを選択し、ツールバーで「無効化」をクリックします。

  • 現在のブレークポイントをすべて無効にするには、「ブレークポイント」ウィンドウで右クリックし、ポップアップ・メニューで「すべて無効化」を選択します。

無効化したブレークポイントを再有効化するには、次のようにします。

  • 無効化したブレークポイントを有効にするには、そのブレークポイントの記号(または「ブレークポイント」ウィンドウのエントリ)を右クリックし、「有効化」を選択します。

  • 無効化したすべてのブレークポイントを有効にするには、「ブレークポイント」ウィンドウで右クリックし、「すべて有効化」を選択します。

  • ブレークポイントのグループを有効にするには、「ブレークポイント」ウィンドウでブレークポイント・グループを右クリックし、「グループの有効化」を選択します。

    また、「ブレークポイント」ツールバーからブレークポイントを有効にすることもできます。ブレークポイントまたはブレークポイント・グループを選択し、ツールバーで「有効化」をクリックします。

ブレークポイントを削除するには、次のようにします。

ブレークポイントでコードを確認する必要がなくなった場合は、ブレークポイントを削除できます。削除には、ソース・エディタまたはブレークポイント・ウィンドウを使用します。

  • ソース・エディタの左マージンで、削除するブレークポイントをクリックします。

  • ソース・エディタの左マージンで削除するブレークポイントを右クリックし、「ブレークポイントの設定」を選択します。

  • ソース・エディタで、そのブレークポイントが含まれているコード行にカーソルを置き、[F5]キーを押します。

  • 現在設定されているブレークポイントをすべて削除するには、ブレークポイント・ウィンドウで右クリックし、「すべて削除」を選択します。

  • 「ブレークポイント」ウィンドウでブレークポイントを選択し、ツールバーで「ブレークポイントの削除」をクリックします。


警告:

削除したブレークポイントを元に戻すことはできません。


19.8.9 インスタンス・ブレークポイントの設定方法

通常、ブレークポイントに達すると常になんらかの影響があります。インスタンス・ブレークポイントは、ブレークポイントが表示されるメソッドを定義するクラスの特定のインスタンスに関連付けられます。

インスタンス・ブレークポイントは、選択したインスタンスを識別するインスタンス・フィルタに関連付けられているソース・ブレークポイントです。インスタンス・ブレークポイントは、デバッガの複数の実行にわたっては保持されません。インスタンス・フィルタは、ブレークポイント・ウィンドウの「インスタンス・フィルタ」列に表示されます。

インスタンス・ブレークポイントを設定するには、次のようにします。

  1. インスタンス・ブレークポイントに変換するソース・ブレークポイントを設定します。ソース・ブレークポイントは、インスタンスのクラスのメソッド内にある必要があります。詳細は、第19.8.6項「ソース・ブレークポイントの設定方法」を参照してください。

  2. 目的のインスタンスがアクセスできる位置に2番目のブレークポイントを設定します。

  3. 次のように、インスタンス・フィルタを定義します。

    • デバッガを開始または再開します。

    • デバッガが2番目のブレークポイントで停止したら、データ・ウィンドウ、スマート・データ・ウィンドウまたは監視式ウィンドウで目的のインスタンスを検索します。

    • インスタンスを右クリックして「インスタンス・フィルタ」を選択し、インスタンス・ブレークポイントになるソース・ブレークポイントを選択します。

      追跡するその他のインスタンスに対して、この作業を繰り返します。

  4. デバッガを再開します。

    デバッガは、選択したインスタンスのインスタンス・ブレークポイントでのみ停止します。

19.8.10 例外ブレークポイントの設定方法

一般に、ブレークポイントは特定のコード行に追加され、そのコード行が実行される直前にデバッガを一時休止します。また、特定タイプの例外が発生したときにアクティブになるようにブレークポイントを設定することもできます。例外ブレークポイントは、特定のコード行には関連付けられません。

例外ブレークポイントを設定するには、次のようにします。

  1. 「ブレークポイント」ウィンドウで、「ブレークポイント」ツールバーの「ブレークポイントの追加」をクリックします。サブメニューから「例外ブレークポイント」を選択します。

    例外ブレークポイントの作成・ダイアログが表示されます。

  2. 「定義」タブで、例外クラス名を入力または選択します。

  3. 必要に応じて、「例外の検出で常にブレーク」チェック・ボックスまたは「捕捉されない例外の検出でブレーク」チェック・ボックスの選択を切り替えることができます。デフォルトでは両方のチェック・ボックスが選択されています。

  4. 「OK」をクリックします。

これで、指定したタイプの例外がスローされるとデバッガは一時停止します。

デフォルトでは、デバッガにより、java.lang.Throwableに未検出の例外がスローされた場合の永続例外ブレークポイントが自動的に作成されます。このブレークポイントは、未検出の例外がスローされると発生します。永続ブレークポイントは無効にできますが、削除できません。

19.8.11 ブレークポイントを条件付きにする方法

ブレークポイントを条件付きにすると、デバッガは特定の条件が満たされた場合に一時休止します。ブレークポイントを初めて設定すると、デバッガはブレークポイントを検出するたびにプログラムの実行を一時休止します。ただし、「ブレークポイントの編集」ダイアログを使用して、特定の条件でのみアクティブになるように、ブレークポイントをカスタマイズできます。

「ブレークポイントの編集」ダイアログの「条件」タブで、プログラムの実行中にデバッガがブレークポイントを検出するたびに評価される式を入力します。式がtrueと評価された場合、プログラムはブレークポイントで一時停止します。falseと評価された場合、プログラムはブレークポイントで停止しません。

たとえば、変数mediumCountが10より大きい場合のみコード行で一時停止するブレークポイントを設定するとします。

ブレークポイントの条件を設定するには、次のようにします。

  1. ソース・エディタで行の左側をクリックして、コード行にブレークポイントを設定します。

  2. 「表示」「デバッガ」「ブレークポイント」を選択して、「ブレークポイント」ウィンドウを開きます。

  3. 「ブレークポイント」ウィンドウで、設定したブレークポイントを右クリックし、「編集」を選択します。

  4. 「ブレークポイントの編集」ダイアログで、「条件」をクリックします。

  5. 「条件」フィールドに、たとえばmediumCount > 1のように入力します。

  6. 「OK」を選択します。

「ブレークポイントの編集」ダイアログには有効なJava言語式を入力できますが、ブレークポイントの場所から式に含まれるすべての記号にアクセスできる必要があります。また、式にはメソッド・コールを含めることはできません。例外ブレークポイントの場合、_throwを使用して条件に例外オブジェクトを使用できます。

ソース・エディタに配置されているブレークポイントを右クリックして条件を設定することもできます。

  1. ソース・エディタの左余白でブレークポイントのアイコンを右クリックします。

  2. 「ブレークポイントの編集」を選択します。

    「ブレークポイントの編集」ダイアログ・ボックスが表示され、条件を指定できます。

ソース・エディタでブレークポイントにカーソルを重ねて条件を設定する方法もあります。

  • エディタ・ウィンドウの左余白にあるブレークポイント・アイコンの上にマウス・カーソルを置きます。

    図19-9のように、「ブレークポイントの編集」ポップアップ・ダイアログが表示されます。このダイアログで条件を設定できます。

19.8.12 パスの回数ブレークポイントの使用

「パスの回数」フィールドでは、ブレークポイントをアクティブにするまでのパスの回数を指定します。パスの回数は、ループがn回目の繰返しで失敗したと考えられる場合に便利です。デバッガはプログラムの実行中にブレークポイントをn回検出するとプログラムを一時休止します。デフォルト値は1です。

ブレークポイント・ウィンドウに「パスの回数」列が表示されている場合、プログラムの実行中にコードのブレークポイント行が検出されるたびにパスの回数の値が減少することが確認できます。ブレークポイント行が検出されたときにパスの回数が1の場合、ブレークポイントがアクティブになり、プログラムはその行で一時休止します。

パスの回数をブレークポイント条件とともに使用すると、プログラムは、条件がtrueとなったn回目にブレークポイントで一時停止します。パスの回数は、条件がtrueの場合のみ減少します。

19.8.13 「ブレークポイント」ウィンドウでブレークポイントを調べる方法

ブレークポイントのリストを表示するには、メイン・メニューから「表示」「デバッガ」「ブレークポイント」を選択します。デバッガによって有効であると確認されたブレークポイントが、図19-8のようなアイコンで示されます。ブレークポイント・ウィンドウを使用して、ソース・コード内のブレークポイントの場所を素早く検索できます。

ブレークポイント・ウィンドウを使用して、ソース・エディタでブレークポイントを検索するには、次のようにします。

  1. 「ブレークポイント」ウィンドウで、ブレークポイントを選択します。

  2. 右クリックして、ポップアップ・メニューから「ソースに移動」を選択します。

19.8.14 ブレークポイント・グループの管理方法

ブレークポイント・グループを作成し、ブレークポイントをこのグループに追加することにより、複数のブレークポイントを1回の処理で有効または無効にできます。ブレークポイント・グループを作成すると、このグループをブレークポイントと同じように有効化、無効化および削除できます。

ブレークポイント・ウィンドウでドラッグ・アンド・ドロップを使用して、ブレークポイントをグループに挿入したり、グループから削除することもできます。

ブレークポイント・グループを作成するには、次のようにします。

  1. 「ブレークポイント」ウィンドウで、ブレークポイントを右クリックし、ポップアップ・メニューから「編集」を選択します。

    「ブレークポイントの編集」ダイアログが表示されます。

  2. 「ブレークポイントのグループ名」フィールドにブレークポイントのグループ名を入力します。

  3. 「OK」をクリックします。

    ブレークポイント・ウィンドウに新しいグループが作成され、フォルダ・アイコンで示されます。編集したブレークポイントは、自動的に新しいグループに入ります。

ブレークポイント・グループにブレークポイントを移動するには、次のようにします。

ドラッグ・アンド・ドロップで、ブレークポイントをブレークポイント・グループに挿入するか、次の手順を実行します。

  1. 「ブレークポイント」ウィンドウで、ブレークポイントを右クリックし、ポップアップ・メニューから「編集」を選択します。

    「ブレークポイントの編集」ダイアログが表示されます。

  2. 「ブレークポイントのグループ名」フィールドで、ドロップダウン・リストからブレークポイントのグループを選択するか、新規グループ名を入力します。

  3. 「OK」をクリックします。

    ブレークポイントが指定したグループに追加されます。

ブレークポイント・グループを有効化、無効化または削除するには、「ブレークポイント」ウィンドウで、ブレークポイント・グループを右クリックし、ポップアップ・メニューから「グループの有効化」「グループを無効化」または「グループの削除」を選択します。

「ブレークポイント」ツールバーからグループを有効化または無効化することもできます。ブレークポイント・ウィンドウでグループ名を選択し、ツールバーの「有効化」または「無効化」アイコンをクリックします。選択したグループのすべてのブレークポイントが有効化または無効化されます。

19.9 デバッガのウィンドウでプログラムの状態を確認する

プログラムは、ステップ実行すると表示できますが、通常はプログラム変数の値を調べて不具合を検出する必要があります。たとえば、ループをステップ実行する際に索引変数の値を確認したり、メソッド・コールで渡されるパラメータの値を確認できると便利です。プログラムがデバッガで一時休止したときに、変数、引数、フィールドおよび配列項目の値を調べることができます。

19.9.1 データ要素のインスペクトおよび変更方法

デバッグ・セッション中にデータ、スマート・データ、インスペクタ、監視式ウィンドウを使用して、データ項目の値をインスペクトおよび変更できます。

データ項目をインスペクトするときには、デバッグ・セッションの実行中に異なる式で評価します。必要に応じて、プログラム・データ値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定できます。

また、デバッグ・セッション中にプログラム・データ値を変更して、プログラム実行中に不具合の仮修正をテストできます。変更によってプログラムのエラーが修正されたことを確認した場合、デバッグ・セッションを終了し、プログラム・コードを修正した後、プログラムを再コンパイルして修正を確定できます。

変数の値を変更する場合、変更はその特定のプログラム実行に対してのみ有効です。データ・ウィンドウまたは監視式ウィンドウで行った変更は、プログラムのソース・コードまたはコンパイル済のプログラムには影響しません。変更を確定するには、ソース・エディタでプログラムのソース・コードを変更し、プログラムを再コンパイルする必要があります。

新しい値の型と割当先の変数の型とには互換性が必要です。割当てによってコンパイルに時間がかかったり、実行時エラーが発生したりした場合には、有効な変更値とは言えません。

データ項目をインスペクトするには、次のようにします。

  1. デバッガがブレークポイントで停止している間にデータ・ウィンドウを開きます。

  2. 「データ」ウィンドウで項目を右クリックし、ポップアップ・メニューから「インスペクト」を選択します。

    フローティング形式の「インスペクタ」ウィンドウが開き、項目の名前、値、その他の関連情報が表示されます。このウィンドウに表示される列は、「ツール」「プリファレンス」→「デバッガ」→「インスペクタ」ページで有効にした列設定によって異なります。詳細は、第19.7.5項「「インスペクタ」ウィンドウの使用方法」を参照してください。

  3. 項目の式を評価するには、ポップアップ・メニューから「式の編集」を選択します。

    監視式を追加することも、データ項目をさらにインスペクトすることもできます。

  4. 終わったら、「インスペクタ」ウィンドウを閉じます。

データ項目を簡単にインスペクトするには、次のようにします。

データ項目の値を表示するのみで式の評価を行わない場合には、「クイック・インスペクト」の機能を使用できます。

  1. デバッガがブレークポイントで停止している間にデータ・ウィンドウを開きます。

  2. 「クイック・インスペクト」の列が表示されるように、「データ」ウィンドウを設定します。「データ」ウィンドウの列のヘッダーを右クリックし、「クイック・インスペクト」を選択します。「クイック・インスペクト」は、ウィンドウの最初の列です。

  3. データ項目を選択し、緑色の球形アイコンをクリックします。

  4. 選択した項目の子を示す子ウィンドウが開き、オブジェクト階層の下位まで変数を簡単にインスペクトできます。「クイック・インスペクト」ウィンドウは、マウス・ポインタをデータ項目から動かすと自動的に閉じます。

JDeveloperでは、「データ」ウィンドウを追加せずにデータ項目をインスペクトすることもできます。ソース・エディタで、デバッガがブレークポイントで停止したら、データ項目の上にマウス・カーソルを重ねると、名前、値、タイプが表示されます。データ項目がオブジェクトまたは配列の場合は、オブジェクト階層の下位にある、選択した項目の子もインスペクトできます。

データ・ウィンドウで変数の値を変更するには、次のようにします。

  1. デバッガがブレークポイントで停止している間にデータ・ウィンドウを開きます。

  2. データ・ウィンドウで項目を右クリックし、ポップアップ・メニューから「値の変更」を選択します。

    選択した項目の名前と現在の値を示す「値の変更」ダイアログが表示されます。

  3. 項目の新しい値を入力します。

    • プリミティブ値を変更する場合、新しい値を入力できます。

    • (文字列以外の)参照ポインタを変更する場合、既存オブジェクトまたは配列のメモリー・アドレスを入力できます。

    • 文字列を変更する場合、新しい文字列値または既存文字列のメモリー・アドレスを入力できます。

  4. 「OK」をクリックして、項目の値を変更し、ダイアログを閉じます。

    データ・ウィンドウ、スマート・データ・ウィンドウ、インスペクタ・ウィンドウまたは監視式ウィンドウに新しい値が表示されます。

19.9.2 監視式の設定方法

監視式を使用すると、プログラムの実行に従って変化する、変数および式の値を監視できます。監視式を入力すると、監視式ウィンドウに、式の現在の値が表示されます。プログラムの実行時、プログラムによって監視式の変数の値が更新されるため、監視の値が変化します。

監視は、「スタック」ウィンドウでの選択内容によって制御される現行のコンテキストに従って、式を評価します。新しいコンテキストに移動すると、その新しいコンテキストに対して式が再評価されます。監視式の変数が定義されていない場所に実行ポイントが移動すると、監視式全体が未定義になります。監視式を評価できる場所に実行ポイントが戻ると、「監視」ウィンドウに再び監視式の値が表示されます。

監視式ウィンドウを開くには、次のようにします。

  • メイン・メニューから「表示」「デバッガ」「監視式」を選択します。

ソース・エディタから監視式を追加するには、次のようにします。

  1. カーソルで監視する式を選択します。

  2. 右クリックし、ポップアップ・メニューから「監視式」を選択して、「監視式」ウィンドウに式を追加します。

    式が入力されたダイアログが表示されます。

  3. 必要に応じて式を編集します。

  4. 「OK」をクリックします。

次の方法で監視式を追加することもできます。

  • データ・ウィンドウでデータ項目を選択します。右クリックして、「監視式」を選択します。

  • 「監視式」ウィンドウを右クリックし、「監視式の追加」を選択します。

  • マウスを使用してデータをデータ・ウィンドウから監視式ウィンドウにドラッグ・アンド・ドロップします。

監視式を編集するには、次のようにします。

  1. 監視式ウィンドウで式を選択して右クリックし、「監視式の編集」を選択します。

    「監視式の編集」ダイアログが表示されます。

  2. 新しい式を入力するか、既存の式を変更して、「OK」をクリックします。

監視式を削除するには、次のようにします。

  • 監視式ウィンドウで式を選択して[Del]キーを押すか、右クリックして、ポップアップ・メニューから「監視式の削除」を選択します。ポップアップ・メニューから「すべての監視式を削除」を選択して、すべての監視式を削除することもできます。


警告:

削除した監視式を元に戻すことはできません。


19.9.3 「インスペクタ」ウィンドウでの式の変更方法

「インスペクタ」ウィンドウで、既存の式を変更できます。

インスペクタ・ウィンドウで式を変更するには、次のようにします。

  1. インスペクタ・ウィンドウを右クリックし、ポップアップ・メニューから「式の編集」を選択します。

    「式の編集」ダイアログが表示されます。

  2. 新しい式を入力します。

  3. 「OK」をクリックします。

19.9.4 「フィルタ対象クラス」リストでフィールドの表示/非表示を切り替える方法

デバッグ中、フィルタを使用して、データ関連デバッガ・ウィンドウでオブジェクトを展開するときに表示するフィールド数を減らすことができます。このタスクは、スマート・データ・ウィンドウ、データ・ウィンドウ、インスペクタ・ウィンドウ、監視式ウィンドウ、およびモニター・ウィンドウの左側で「オブジェクト設定」ダイアログを使用して実行できます。フィールド数を減らすことにより、デバッグの対象範囲が絞られ、プログラムの問題を容易に検出して切り離すことができるようになります。

たとえば、データ・ウィンドウでクラスに対してフィルタを作成し、必要なフィールドのみを表示できます。これにより、画面が見やすくなり、関連するデータを簡単に見つけることができます。

「フィルタ対象クラス」リストでフィールドを表示または非表示にするには、次のようにします。

  1. データ関連デバッガ・ウィンドウでオブジェクトを選択します。右クリックして、ポップアップ・メニューから「オブジェクト設定」を選択します。

    「オブジェクト設定」を選択することで、この特定のオブジェクトに関する「オブジェクト設定」ダイアログに直接移動でき、このダイアログで、オブジェクトを展開するときに表示するフィールドと表示しないフィールドを制御するフィルタを指定できます。

  2. 「オブジェクト設定」ダイアログでは、選択したオブジェクトのスーパークラス階層を簡単に横断しながら、各スーパークラスのフィルタを定義および更新できます。「タイプ階層」でクラスを選択し、「デバッガ」ウィンドウの「値」列に表示する、または表示しないフィールドを選択します。

  3. 「表示するフィールド」リストから「非表示にするフィールド」リストにフィルタを移動するには、矢印をクリックします。

  4. 終了したら「OK」をクリックします。

19.10 Javaプログラムのリモート・デバッグ

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プログラムをデバッグする場合は、このオプションを選択します。

19.10.1 デバッグ・モードでの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に設定した場合、デバッグ対象プロセスはデバッガの接続を待機せずただちに開始されます。

コマンドラインの例:

  • 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
を参照してください。

19.10.2 JavaScriptデバッガを使用したリモート・デバッグの方法

JDeveloperでは、ローカル・インスタンスおよびサーバー・インスタンスで、JavaScriptプログラムをリモート・デバッグすることができます。

リモート・デバッグを開始する前に、JavaScriptデバッグ用のFirefoxプラグインをインストールし、JavaScriptをリモート・デバッグできるようにJDeveloperを設定します。

JavaScriptプログラム(HTML/JSファイル)をリモート・デバッグするには、次のようにします。

  1. JDeveloperでリモート・デバッグを有効にします。

    • 「アプリケーション」「プロジェクト・プロパティ」を選択します。

    • 「プロジェクト・プロパティ」ダイアログで、「実行/デバッグ/プロファイル」ノードを選択します。「実行構成」リストから実行構成を選択し、「編集」をクリックします。

    • 「実行構成の編集」ダイアログの「起動設定」ページで、「リモート・デバッグ」を選択します。

    • 「ツール設定」「デバッガ」で「リモート」ノードを選択します。

    • 「リモート」ページで、「プロトコル」として「Mozilla/Firefoxにアタッチ」を選択します。

    • オプションで、ホスト・マシン名、ポート、タイムアウト情報を設定します。デフォルトでは、JDeveloperはポート4000を使用し、タイムアウト値は2秒です。

    • 「OK」をクリックして「実行構成の編集」ダイアログを閉じ、「プロジェクト・プロパティ」ダイアログも閉じます。

  2. Firefoxのインスタンスが開いている場合には、すべて閉じます。

  3. JDeveloperで、JavaScriptプログラムにブレークポイントを設定します。

  4. コマンド・ウィンドウを開き、次のコマンドでMozilla Firefoxを起動します。

    firefox AnHtmlFile -oraclejsdebugport=<port> <another browser argument>

    次に例を示します。

    C:\>firefox file://C:/Shopcart/Servlet/public_html/index.html -oraclejsdebugport=4000

    Firefoxは開きませんが、Firefoxのプロセスがバックグラウンドで起動します。Windowsの「タスク マネージャ」を開き、Firefoxのプロセスが実行中であることを確認します。

  5. JDeveloperで、リモート・デバッガを起動します。アプリケーション・ナビゲータでプロジェクトを選択し、右クリックして「リモート・デバッガの開始」を選択します。

  6. Firefoxブラウザでプログラムが起動し、JDeveloperではソース・コードに設定した最初のブレークポイントでデバッガが停止します。これで、使用可能なデバッガ・オプションでJavaScriptプログラムのデバッグを続行できます。

サーバー・インスタンス(JSP/Servlets/HTMLファイル)でJavaScriptプログラムをリモート・デバッグするには、次のようにします。

  1. JDeveloper統合WebLogicサーバーを起動します。「実行」メニューから、「サーバー・インスタンスの起動」を選択します。

  2. プロジェクトを統合WebLogicサーバーにデプロイします。

  3. JDeveloperでリモート・デバッグを有効にします。

    • 「アプリケーション」「プロジェクト・プロパティ」を選択します。

    • 「プロジェクト・プロパティ」ダイアログで、「実行/デバッグ/プロファイル」ノードを選択します。「実行構成」リストから実行構成を選択し、「編集」をクリックします。

    • 「実行構成の編集」ダイアログの「起動設定」ページで、「リモート・デバッグ」を選択します。

    • 「ツール設定」「デバッガ」で「リモート」ノードを選択します。

    • 「リモート」ページで、「プロトコル」として「Mozilla/Firefoxにアタッチ」を選択します。

    • オプションで、ホスト・マシン名、ポート、タイムアウト情報を設定します。デフォルトでは、JDeveloperはポート4000を使用し、タイムアウト値は2秒です。

    • 「OK」をクリックして「実行構成の編集」ダイアログを閉じ、「プロジェクト・プロパティ」ダイアログも閉じます。

  4. Firefoxのインスタンスが開いている場合には、すべて閉じます。

  5. JDeveloperで、プログラム・ファイルにブレークポイントを設定します。

  6. コマンド・ウィンドウを開き、次のコマンドでMozilla Firefoxを起動します。

    firefox webaddress -oraclejsdebugport=<port> <another browser argument>

    次に例を示します。

    C:\>firefox http://130.35.102.18:7101/Shopcart/index.jsp -oraclejsdebugport=4000

    Firefoxは開きませんが、Firefoxのプロセスがバックグラウンドで起動します。Windowsの「タスク マネージャ」を開き、Firefoxのプロセスが実行中であることを確認します。

  7. JDeveloperで、リモート・デバッガを起動します。アプリケーション・ナビゲータでプロジェクトを選択し、右クリックして「リモート・デバッガの開始」を選択します。

  8. Firefoxブラウザでプログラムが起動し、JDeveloperではソース・コードに設定した最初のブレークポイントでデバッガが停止します。これで、使用可能なデバッガ・オプションでプログラムのデバッグを続行できます。

19.10.3 リモート・デバッグ用に設定されたプロジェクトの使用方法

任意のプロジェクトを構成して、リモート・デバッグを実行できます。

リモート・デバッグ用にプロジェクトを設定するには、次のようにします。

  1. ツールバーから「デバッグ」をクリックします。

    適切なアタッチ・ダイアログが表示されます。

  2. 「ホスト」リスト・ボックスで、リモートのデバッグ対象プロセスを開始するマシンの名前またはIPアドレスを入力するか、選択します。

  3. 「ポート」リスト・ボックスで、リモートのデバッグ対象プロセスのポート番号を入力するか、選択します。

  4. 「OK」をクリックします。

    デバッガが接続されると、ログ・ウィンドウに、接続に成功したことを示すメッセージが表示されます。

  5. JSPまたはサーブレットをデバッグしている場合は、ブラウザを起動してJSPまたはサーブレットにアクセスする必要があります。EJBをリモート・デバッグしている場合は、EJBにアクセスするEJBクライアントを実行する必要があります。

  6. 通常と同じようにデバッグ・セッションを続けます。

  7. デバッグ対象プロセスを終了することなく、リモートのデバッグ対象プロセスからデバッガの接続を解除するには、「実行」「連結解除」メニュー・オプションを選択します。このオプションは、アプリケーション・サーバーをリモート・デバッグする場合に適しています。

  8. リモートのデバッグ対象プロセスを終了するには、「実行」「終了」メニュー・オプションを選択するか、「終了」アイコンを選択します。

19.10.4 JPDAリモート・デバッグの設定方法

次の各ステップでは、Java Platform Debugger Architecture (JPDA)リモート・デバッグ用にJDeveloperを設定します。

リモート・デバッグ用にプロジェクトを設定するには、次のようにします。

  1. global-web-application.xmlのJSPの部分を次のように変更します。

    <init-param> 
       <param-name>debug</param-name> 
       <param-value>class</param-value> 
    </init-param>
    
  2. 統合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を設定するには、次のようにします。

  1. 「アプリケーション」「プロジェクト・プロパティ」「実行/デバッグ/プロファイル」ノードを選択し、実行構成を選択して「編集」をクリックします。

  2. 「リモートのデバッグおよびプロファイル」チェック・ボックスを選択します。

  3. 「デバッガ」→「リモート」ページで、「プロトコル」「JPDAにアタッチ」に設定されていることを確認します。

  4. 「設定」ダイアログを閉じます。

  5. コードにブレークポイントを設定して、「デバッグ」ボタン・ドロップダウン・リストから必要な実行構成を選択します。「接続」ダイアログへの入力を完了し、デバッグ対象プロセスへの接続を確認します。

  6. ブラウザを使用して、サーバーにすでにデプロイされているJSPにアクセスします。ブレークポイントが検出され、すべて予想どおりに動作します。