web-dev-qa-db-ja.com

Javaアプレットをどのようにデバッグしますか?

現在、私が持っている唯一の情報は、ブラウザのステータスバーに1行のエラーメッセージがあります。

たとえば、スタックトレースを取得する方法を知っていますか?

55
zimbatm

この記事は少し古い ですが、関連性はあります(「Javaプラグイン」でアプレットをデバッグする方法」というタイトルのセクションを含む)。

編集:おそらくスタックトレースを取得するより良い方法は、 Javaプラグインコンソール を使用することです。そのウィンドウで「t」を押すと、次のように表示されます。

既存のすべてのスレッドグループを出力します。表示される最初のグループはグループメインです。 acはアクティブカウントを表します。これは、スレッドグループとその子スレッドグループ内のアクティブなスレッドの総数です。 agcはアクティブなグループカウントを表します。これは、スレッドグループのアクティブな子スレッドグループの数です。 priは優先順位を表します。スレッドグループの優先順位です。 Group mainに続いて、他のスレッドグループがGroupとして表示されます。nameはアプレットに関連付けられたURLです。スレッドの個々のリストには、スレッド名、スレッド優先度、スレッドが生きている場合は生きているか、スレッドが破棄されている場合は破棄される、スレッドがデーモンスレッドである場合はデーモンが表示されます。

私がそのコンソールから最も頻繁に使用したもう1つのコマンドは、0〜5のトレースレベルです。

これにより、次のセクション Tracing and Logging。 で説明されているように、トレースレベルのオプションが設定されます。

そのページから、レベルが次のように見えることがわかります。

  • 0 —オフ
  • 1 —基本
  • 2 —ネットワーク、キャッシュ、および基本
  • 3 —セキュリティ、ネットワーク、および基本
  • 4 —拡張機能、セキュリティ、ネットワーク、および基本
  • 5 — LiveConnect、拡張機能、セキュリティ、ネットワーク、一時、および基本

これらのツールはすべて、世界中のアプレットの頭に入ってきたものを解明しようとしているので、かなり便利です。彼らが私のために働いたことを知っています。

26
Bob Cross

Java 6 update 7以降のJavaコンソールとアプレットビューアーの明らかな使用とは別に、JDKに付属の VisualVM を使用できます(JDK_HOME/bin/visualvm)。各スレッドのスタックトレースを表示し、すべてのオブジェクトインスタンスを表示することもできます。

AppletViewerは非常に便利です。Eclipseから「Run as/Java Applet」を実行して実行するか、「Debug As/Java Applet」を実行してアプレットクラスをデバッグできます。

ただし、セキュリティ関連のものをデバッグするために、ブラウザプラグイン環境がappletviewerとあまりにも異なる場合があります。ブラウザでアプレットを効果的にデバッグするためにできることは次のとおりです。

1)バイナリのデバッグ情報を取得します

JRE_HOME/libから.jarファイルをバックアップします

(ダウンロードおよび)JREと同じバージョンのJDKをインストールします。

.jarファイルをJDK_HOME/jre/libからJRE_HOME/libにコピーします

JDK内のファイルは、デバッグ情報(ソースコードの行番号情報、変数名など)を含めてコンパイルされており、JREファイルにはこの情報がありません。

これがないと、デバッガーでコアクラスコードに有意義にステップインすることができません。

2)Javaプラグインのデバッグを有効にします

Javaコントロールパネルに移動します/ Java/Javaランタイム設定/ビュー/ユーザー/ランタイムパラメーター

そして、デバッグを有効にするオプションを追加します。このようなもの:

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

興味深いオプションは、ポート(ここでは2502を使用し、ほとんどすべての空きポートを使用できます。後で使用するために書き留めてください)および一時停止-アプレットの起動、クラスローディングなどをデバッグする必要がある場合、これを「y」に設定します。こうすると、アプレットページにアクセスすると、デバッガーが接続するのを待ってJVMが直ちに中断されるため、ブラウザーがフリーズしたように見えます。

3)お気に入りのIDEを使用して、Javaプラグインをリモートでデバッグします

たとえば、Eclipseでは、実行/デバッグ構成... /リモートJavaアプリケーションを選択します

「新規」ボタンをクリックします。

接続タイプが「ソケット接続」であることを確認し、ブラウザがローカルの場合はホストとしてローカルホストを選択し、先ほど選択したポート(例では2502)を選択します。

Javaコアクラスソースを使用可能にするには、ソースタブでJDKにsrc.Zipを含める必要がある場合があります。

構成を保存し、ブラウザーが(JVMが中断されているかどうかに関係なく)プラグインを実行したら、アプレットソースを含むプロジェクトを開いて、リモートデバッガーを実行してプラグインJVMに接続します。

53
Sami Koivu

アプレットビューア はデバッグオプションをサポートします。

3
Brian Agnew

キャッチされなかった例外からのスタックトレースがコンソールに表示されます。これは、Java Control Panel(Advanced> Java console> Show console))から有効にすることができます。

実行中のPlugInプロセスにデバッガーを接続できます。

おそらく、最善の方法はまったくデバッグしないことです。テストを書きます。アプレットとして実行しているなど、不必要な前提に結び付けられないコードを記述します。残念ながら、ほとんどのGUI /アプレットのサンプルコードは非常に不適切に記述されています。

キャッチされなかった例外はコンソールに送信されます。 System.outを使用して、独自のメッセージをコンソールに書き込むこともできます。結果を表示するには、システムトレイのJavaアイコンを右クリックしてコンソールを開くことでコンソールを開く必要があります(これはMicrosoftのVMでは異なります)。

アプレットを適切にデバッグするには、Eclipseをセットアップしてアプレットをデバッグします。アプレットのソースファイルを右クリックし、[アプレットとしてデバッグ]をクリックします。 (アプレットのパラメーターがある場合は、これを設定する必要があります。)その後、他のJavaコードをデバッグするように、アプレットコードをステップ実行できます。

1
Pool

Eclipseから接続しようとするたびに、リモートアプレットのデバッグを行う際に問題に直面しました、その接続はエラーを拒否しました、私のjreバージョンは64ビットでEclipse 32ビットでしたが、32ビットjreに置き換えたとき、それはうまくいきました。また、32ビットと64ビットの両方のjreバージョンをインストールした場合、IEはデフォルトでアプレットに64ビットjreを使用し、chromeとFFは32ビットjreバージョン。

1
ranjeetcao

私にとって、Eclipseでアプレットのデバッグを取得するための最も重要なアクションは、デバッグシンボルを持つ、使用する適切なバイナリをJavaコントロールパネル(Java))に設定することです。このシンボル。したがって、Javaコントロールパネル、タブJava、ビューボタンを押して、jdkフォルダーの下で正しいjreを見つけた後、私にとっては「C:\ Programmi\Java\jdk1 .7.0_03\jre」、およびこのエントリに対してのみ有効なチェックを入れます。これは、私にとって、Sami Koivuが言うことを行うためのクリーンな方法です。

1
scotchwisky