接続および呼び出しの詳細 |
トランスポート
コネクタ
Sun VM の呼び出しオプション
Plug-in アプレットのデバッグ
JDB との接続
デバッガアプリケーションとターゲット VM の間に接続が確立される際には、一方がサーバとして動作し、接続を待機します。 その後、もう一方がリスナーに接続され、接続が確立されます。 JPDA のトランスポートでは、デバッガアプリケーションまたはターゲット VM のどちらかをサーバとして動作させることができます。 接続が確立されている間は、「トランスポートアドレス」によって相互の接続が識別されます。 トランスポートアドレスは文字列です。その形式は、トランスポートの実装に依存します。
Win 32 プラットフォーム上の JPDA リファレンス実装では、 共用メモリトランスポートおよびソケットトランスポートの 2 つのトランスポートが提供されます。 Solaris プラットフォーム上の JPDA リファレンス実装では、ソケットトランスポートが提供されます。 今後の JPDA リファレンス実装には、追加のトランスポートが含まれる予定です。また、JPDA の今後の仕様では、追加のトランスポートを実装に組み込むためのインタフェースが提供される予定です。
クライアントがサーバに接続しているコンテキストでは、ソケットトランスポートアドレスの形式は、「<name>:<port>」になります。<name> はホスト名です。また、<port> は接続または待機しているソケットポート番号です。 サーバがクライアントとの接続を待機しているコンテキストでは、アドレスはポート番号だけで構成されます (ホスト名は明示されない)。
共用メモリのトランスポートアドレスは、Win32 のファイルマッピングオブジェクト名として使用できる名前です。この名前の文字列には、バックスラッシュを除く任意の文字を含めることができます。
実装されるコネクタをユーザが選択および構成できるように、JDI クライアントアプリケーションを作成することもできますが、特定のコネクタに関する情報をデバッガに組み込んでおくと、ユーザが使いやすい構成になります。 JPDA で提供されている JDB の実装例では、この方法が採用されています。
JDI リファレンス実装では、使用可能なトランスポートの種類および接続モード (起動、待機、および接続) に対応するいくつかのコネクタが提供されています。 それらのコネクタについて、これから説明します。
このコネクタは、「com.sun.jdi.CommandLineLaunch」という名前で一意に識別されます。
name | 必須 | デフォルト値 | description |
home | オプション | 現在の java.home のプロパティ値 | ターゲット VM の呼び出しに使用される Java 2 Runtime Environment の場所 |
options | オプション | "" | VM を呼び出すときに使用するオプション。標準のデバッグオプションを含む |
main | 必須 | "" | デバッグするアプリケーションのメインクラスおよびコマンド行の引数 |
suspend | オプション | true | メインクラスがロードされる直前にターゲット VM が中断される場合は true、そうでない場合は false |
quote | 必須 | "¥"" | コマンド行上で、空白で区切られたテキストを結合するときに使用する文字 |
vmexec | 必須 | java | VM 起動用ウィンドウの実行可能ファイル。 デバッグ時には、javaw または java_g に変更できる (それらの起動用ウィンドウが使用可能な場合) |
このコネクタは、「com.sun.jdi.RawCommandLineLaunch」という名前で一意に識別されます。
name | 必須 | デフォルト値 | description |
command | 必須 | "" | デバッグするアプリケーションからターゲット VM を呼び出すときに使用するコマンド行全体 |
address | 必須 | "" | 新しく起動されたターゲット VM の接続を待機するトランスポートアドレス。 この値は、通常は raw コマンドの引数として使用される。ただし、接続先のトランスポートアドレスを、ターゲット VM で独自に識別できる場合は必須ではない |
quote | 必須 | "¥"" | コマンド行上で、空白で区切られたテキストを結合するときに使用する文字 |
このコネクタは、「com.sun.jdi.SocketAttach」という名前で一意に識別されます。
name | 必須 | デフォルト値 | description |
hostname | オプション | ローカルホスト名 | 接続先のホストマシン名 |
port | 必須 | "" | 接続先のホストマシン上のポート番号 |
このコネクタは、「com.sun.jdi.SharedMemoryAttach」という名前で一意に識別されます。
name | 必須 | デフォルト値 | description |
name | 必須 | "" | ターゲット VM が待機中の共用メモリのトランスポートアドレス |
このコネクタでは、複数のターゲット VM からの接続を受け入れることができます。
このコネクタは、「com.sun.jdi.SocketListen」という名前で一意に識別されます。
name | 必須 | デフォルト値 | description |
port | 必須 | "" | 接続を待機するポート番号 |
このコネクタでは、複数のターゲット VM からの接続を受け入れることができます。
このコネクタは、「com.sun.jdi.SharedMemoryListen」という名前で一意に識別されます。
name | 必須 | デフォルト値 | description |
name | 必須 | "" | ターゲット VM の接続を待機する共用メモリのトランスポートアドレス |
Hotspot Performance Engine がインストールされている場合は、Classic VM を選択するために -classic が必要です。
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
使用できるオプションについて、次の表で説明します。
name | 必須 | デフォルト値 | description |
help | オプション | N/A | 簡単なヘルプメッセージを表示して VM を終了する |
transport | 必須 | none | デバッガアプリケーションに接続するときに使用するトランスポートの名前 |
サーバ | オプション | "n" | 「y」の場合は、デバッガアプリケーションの接続を待機する。そうでない場合は、指定されたアドレスのデバッガアプリケーションに接続する
「y」が指定されているときにアドレスが指定されていない場合は、デバッガアプリケーションを待機するトランスポートアドレスを選択し、標準出力ストリームにそのアドレスを出力する |
address | server=n の場合は、必須。 server=y の場合は、オプション |
"" | 接続用のトランスポートアドレス。 server=n の場合は、このアドレスのデバッガアプリケーションに対して接続する。 server=y の場合は、このアドレスで接続を待機する |
launch | オプション | none | JDWP の初期化が完了したときに、この文字列に指定されたプロセスを起動する。 このオプションは、「Just-In-Time デバッグ」を行うときに、onthrow または onuncaught、あるいはその両方のオプションと組み合わせて使用する。「Just-In-Time デバッグ」では、この VM で特定のイベントが発生したときにデバッガプロセスが起動する
起動されるプロセスは、自身のウィンドウでは起動されないことに注意。 ほとんどの場合、起動されるプロセスは小さなアプリケーションで、起動後にデバッガアプリケーションが自身のウィンドウで起動される この引数に指定した文字列には、空白で区切られた次の文字列が追加される。 これらの文字列は、起動されたデバッガがこの VM との接続を確立するために使われる。 こうして生成された文字列が実行される
|
onthrow | オプション | none | 特定のクラスの例外がこの VM にスローされるまで、JDWP ライブラリの初期化を遅延する。 例外クラス名は、パッケージで修飾されていなければならない。JDWP が初期化されたときに接続が確立されるため、この例外がスローされるまで接続は確立されない |
onuncaught | オプション | "n" | 「y」の場合は、uncaught 例外がこの VM にスローされるまで、JDWP ライブラリの初期化を遅延する。 JDWP が初期化されたときに接続が確立されるため、この例外がスローされるまで接続は確立されない。 uncaught 例外の定義については、JDI 仕様の com.sun.jdi.ExceptionEvent を参照 |
stdalloc | オプション | "n" | JDWP リファレンス実装では、メモリを割り当てるときに代替アロケータがデフォルトで使用される。 「y」の場合は、標準の C 実行時ライブラリアロケータが使用される。 このオプションは、主にテスト用なので、注意して使用する必要がある。 代替アロケータが無効な場合は、この VM 内でデッドロックが発生することがある |
strict | オプション | "n" | 「y」の場合は、JVMDI に完全に準拠していることを前提とする。 このため、JVMDI 実装の既知のバグに対する回避策がすべて無効になる。 このオプションは、主にテスト用なので、注意して使用する必要がある |
suspend | オプション | "y" | 「y」の場合、VMStartEvent は中断ポリシーが SUSPEND_ALL になる。 「n」の場合、VMStartEvent の中断ポリシーは SUSPEND_NONE になる |
JDI の起動コネクタは、Plug-in アプレットのデバッグには使用できません。
JDB では、-attach オプションを指定すると、リファレンス実装の接続コネクタ (Win32 上では共用メモリ、Solaris 上ではソケット) にアクセスすることができます。 -listen オプションを指定すると、リファレンス実装の待機コネクタ (Win32 上では共用メモリ、Solaris 上ではソケット) にアクセスすることができます。 コマンド行にクラス名と引数を直接指定すると、Sun コマンド行起動コネクタにアクセスすることができます。
例を示します。
jdb -attach myhost:8000
上のように入力すると、ソケット接続コネクタを使用して簡単にターゲット VM に接続できます (Solaris 上)。
jdb Hello 1 2 3
上のように入力すると、Sun コマンド行起動コネクタを使用して簡単にターゲット VM を起動できます。
また、JDB には、-connect オプションも用意されています。コネクタ名を指定し、さらに引数として名前と値の任意の組み合わせを指定することによって、任意のコネクタを使用できます。 たとえば、上記の 2 つのコマンド行は、次のコマンド行と同じことです。
jdb -connect com.sun.jdi.SocketAttach:hostname=myhost,port=8000
jdb -connect "com.sun.jdi.CommandLineLaunch:main=Hello 1 2 3"
これらのコマンド行は、最初の例よりも複雑ですが、-connect オプションを指定すれば任意のコネクタを使用できます。 これらの操作から、JDI デバッガでは、任意のコネクタを使用できることがわかります。また、よく使われるコネクタを使用するための簡単なインタフェースも提供されています。
Copyright © 2001 Sun Microsystems, Inc. All Rights Reserved.
コメントの送付先: java-debugger@java.sun.com |