デバッグのサポート


このセクションでは、次のトピックについて説明します。

これまでは、Java Plug-in で Java アプレットのデバッグを行うことは簡単ではありませんでした。その理由の 1 つとして、アプレットが、Java 2 Runtime Environment、Java Plug-in、およびブラウザ自体の提供する多くのサービスおよび機能を利用することが挙げられます。 アプレットが正常に動作しない場合、開発者は時間を費やして問題を分析する必要があります。

このドキュメントの目的は、デバッグ処理を簡略化することです。 ここでは、Java Plug-in でアプレットを開発する上で役立つ技術や提案を提供します。また、アプレット開発で陥りがちな誤りについても説明します。

Java Plug-in でのアプレットのデバッグ方法

アプレットのデバッグを行うには、適切なバージョンの Java 2 SDK, Standard Edition がマシンにインストールされている必要があります。 また、javac.java ファイルをコンパイルするときは、必ず -g オプションを付ける必要があります。 アプレットのデバッグを開始するには、次の操作を実行します。

  1. Java Plug-in コントロールパネルを起動します。 [Advanced] タブの [Java Runtime Parameters] に、次のパラメータを指定します。
    -Djava.compiler=NONE
    -Xnoagent
    -Xdebug 
    -Xrunjdwp:transport=dt_shmem,address=
    	<connection-address>,server=y,suspend=n
    

    <connection-address> には、java デバッガが後で JVM への接続に使用する任意の文字列を指定できます。 次に例を示します。

    -Djava.compiler=NONE
    -Xnoagent
    -Xdebug
    -Xrunjdwp:transport=dt_shmem,address=2502,server=y,suspend=n

    デバッグに使用可能な実行時パラメータの詳細は、「JPDA の接続および呼び出し」を参照してください。

  2. Java Plug-in コントロールパネルの [Advanced] タブで、Java Runtime Environment の「JDK <version> in <jdk-path>」を選択します。<version> は Java Plug-in のバージョンを、<jdk-path> は Java 2 SDK のインストールパスを表します。 たとえば、「JDK1.4 in C:¥jdk1.4」のようになります。
  3. Internet Explorer または Netscape Navigator を起動して、デバッグ対象のアプレットを含むページをロードします。 アプレットコードが、javac-g オプションを付けてコンパイルされていることを確認してください。
  4. DOS コマンドプロンプトで、コマンド jdb -attach <connection address> を実行します。<connection address> には、ステップ 1 で説明した名前を指定してください。たとえば、<connection address>2502 の場合、実行するコマンドは次のようになります。
    		  jdb -attach 2502
    
    Java デバッガ (jdb) の詳細は、「Java デバッガ」を参照してください。
  5. jdb から VM への接続が確立されると、アプレット内にブレークポイントを設定できます。
  6. ブラウザ内のアプレットがブレークポイントに達すると、実行は停止し、デバッガは待機状態に入ります。ユーザが入力するまでデバッグは再開されません。

Java Plug-in でアプレットのデバッグを行う場合、一度に 1 つの接続アドレスを使用してデバッグを行うのは、ブラウザの 1 つのインスタンスだけであることを確認してください。 このようにしない場合、ブラウザの各インスタンスの Java Runtime が接続アドレスへの排他的なアクセスを試みるため、競合が発生します。 Internet Explorer と Netscape Navigator の両方でアプレットをデバッグする場合、Java Plug-in とともに Internet Explorer または Netscape Navigator のどちらかを実行するようにします。ただし、一度に両方を実行しないでください。

アクティブデスクトップ環境で Java Plug-in のアプレットをデバッグすることは推奨されていません。これは、ユーザセッションの期間中、Internet Explorer のインスタンスが常にデスクトッププロセスで実行されているためです。

jdb の代わりに、Inprise 社の JBuilder や Symantac 社の VisualCafe など、他の Java 2 デバッガを使用できます。 デバッガを使用するには、これらの IDE のプロジェクトオプションを変更し、同じマシンまたはリモートマシンのブラウザプロセス内の Java Plug-in を追加する必要があります。 Java Plug-in コントロールパネルに、別の Java 実行時のパラメータを設定することが必要な場合もあります。 詳細は、Java 2 デバッガまたは IDE マニュアルを参照してください。

Java Plug-in コンソール

Java Plug-in コンソールは、Java Plug-in の中でも最も強力なツールの 1 つです。 これは、System.out および System.err メッセージをすべてリダイレクトする単純なウィンドウです。 コンソールウィンドウは、デフォルトでは無効に設定されていますが、Java Plug-in コントロールパネルまたはツールバーで有効にすることができます。 コンソールを有効にすると、ブラウザ内で Java Plug-in を使用する際にコンソールウィンドウが表示されます。

Java Plug-in のトレースファイル

このファイルは、Java Plug-in コンソールと同様、すべての System.out および System.err メッセージを記録します。 トレースファイルはデフォルトでは無効に設定されていますが、Java Plug-in コンソールが有効になると、自動的にトレースファイルも有効になります。 トレースファイルは、通常、.plugin<version>.trace という名前で user.dir に格納されます。 たとえば、Windows NT の場合、このファイルは C:¥WINNT¥Profiles¥<username>¥.plugin<version>.trace に配置されます。

javaplugin.trace プロパティ

このプロパティは、Java Plug-in が実行時にトレースメッセージを出力するかどうかを制御します。 これは、アプレットの開発者が Java Plug-in 内で起きていることを知るのに役立ちます。設定可能な値は、true または false です。 このプロパティのデフォルトは false です。 このプロパティを有効にするには、Java Plug-in コントロールパネルの [Advance Panel] にある [Runtime Parameters] フィールドに -Djavaplugin.trace=true を設定します。

java.security.debug プロパティ

このプロパティは、Java 2 Runtime Environment のセキュリティシステムが、実行時にトレースメッセージを出力するかどうかを制御します。 これは、アプレット内でセキュリティ例外がスローされた場合、または署名付きアプレットが動作しない場合に有用です。 サポートされるオプションは次のとおりです。

access には、次のオプションを指定できます。

たとえば、checkPermission の結果をすべて出力し、コンテキスト内のすべてのドメインをダンプするには、Java Plug-in コントロールパネルの [Advanced Panel] にある [Runtime Parameters] フィールドに -Djava.security.debug=access:stack を設定します。

ドキュメント

Java Plug-in の提供するドキュメントは、開発者が Java Plug-in のさまざまな機能を使用する上で役に立ちます。ドキュメント内の FAQ には、開発者がしばしば尋ねる質問が掲載されています。 アプレットを開発する前に、これらのドキュメントを読んで理解しておくと、デバッグに費やす時間を大幅に節約できる場合があります。

バグの分離

Java Plug-in は Internet Explorer および Netscape Navigator 内で Java 2 Runtime Environment を提供するとはいえ、機能の大半は Java Plug-in ではなく、Java 2 Runtime 自体により提供されます。このため、Java Plug-in 内で問題が発生した場合、原因は Java Plug-in、Java 2 Runtime 自体、またはユーザエラーのいずれかにあります。 バグの原因がどこにあるかを識別するのは、バグの評価および修正の速度に影響するため、非常に重要です。 以下に、バグを分離するのに役立つ提案を示します。

  1. Internet Explorer と Netscape Navigator の両方で Java Plug-in を使用してアプレットを実行します。
  2. appletviewer でアプレットを実行します。 Java Plug-in は主に appletviewer から派生したものなので、appletviewer からの問題点も継承しています。 この手順は、Java Plug-in の提供する特定のブラウザ機能 (HTTPS や RSA 署名など) をアプレットが必要としない場合にだけ実行してください。
  3. アプレットが appletviewer で失敗する場合、問題は大抵 Java Plug-in にあるのではなく Java 2 Runtime Environment にある可能性があります。
  4. アプレットが IE または Netscape の一方だけで失敗する場合、問題は大抵 Java Plug-in にあります。
  5. アプレットが IE と Netscape の両方のブラウザで失敗するが appletviewer では失敗しない場合、Java Plug-in の問題かユーザエラーのどちらかの可能性があります。 アプレットのコードを表示して、実行環境に関して何らかの前提条件が存在するかどうかを確認してください。 たとえば、appletviewer では、カレントディレクトリが、appletviewer 起動時のシェル内のカレントディレクトリに設定されるのに対し、Java Plug-in のカレントディレクトリはブラウザのディレクトリに設定することが可能です。 したがって、カレントディレクトリからのリソースのロードは appletviewer では実行できますが、Java Plug-in ではできません。
  6. ほかのマシンまたはプラットフォームで問題の再現を試みます。 時には、問題の原因がマシンの構成にある場合 (不適切な DNS 設定など) があります。
  7. Java 2 Runtime Environment または Java Plug-in で問題を識別できた場合は、次のセクションの指示に従ってバグレポートを適切な製品カテゴリに送信してください。

バグレポートの送信

バグレポートを送信するときは、Java Development Connection の BugParade に移動してください。 バグレポートを送信する前に BugParade を検索して、同じバグがすでに報告されているかどうかを確認してください。 場合によっては、回避方法が示されていることもあります。 バグレポートが未提出であることを確認したら、新規バグレポートを Java Plug-in チームに送信してください。 バグレポートには、次の情報を含めてください。

機能要求の送信

機能要求を送信する場合は、「Report A Bug or Request a Feature」のページから行います。送信に際しては、次の情報が含まれていることを確認してください。

Java Plug-in フィードバックエイリアス

Java Plug-in フィードバックエイリアス java-plugin-feedback@sun.com の目的は、カスタマが製品機能および製品全般に関するフィードバックを提出することです。 このエイリアスは、バグレポートを送信するためのものではありません。 バグレポートの送信は、前述の手順に従って実行してください。