JavaTM Platform Debugger Architecture |
ホームページ |
コンポーネント デバッガインタフェース / |--------------| / | VM | debuggee ----( |--------------| <------- JVMTI - Java VM Tool Interface \ | バックエンド | \ |--------------| / | 通信チャネル -( | <--------------- JDWP - Java Debug Wire Protocol \ | |--------------| |フロントエンド | |--------------| <------- JDI - Java Debug Interface | UI | |--------------|
JPDA は、次の 3 つの階層で構成されます。
デバッガの中には、より低い層である JDWP (フロントエンドが Java で記述されていない場合) や JVMTI (低レベルの機能を必要とする特殊なデバッガの場合) の上に構築されるものもあります。
このデバッガのアーキテクチャは、さまざまな VM 実装で使用できるように設計されています。
この VM では、Java Virtual Machine Debug Interface (JVMTI) が実装されます。
Java で記述されたデバッガサポートコードを debuggee 上で実行した場合、debuggee との競合が発生し、ハングアップおよびその他の予期しない動作をする可能性があります。このため、バックエンドはネイティブコードで記述されており、JVMTI は純粋なネイティブインタフェースになっています。
通信チャネルは、デバッガのフロントエンドおよびバックエンド間のリンクです。これは、次の 2 つの機構で構成されていると考えることができます。
J2SE 5.0 から、JPDA にはサービスプロバイダインタフェースが含まれており、これを使うと、コネクタやトランスポートの実装を開発および配置できます。これらのサービスプロバイダインタフェースにより、デバッガやほかのツールベンダーで新しいコネクタ実装を開発し、Sun が提供するソケットおよび共用メモリトランスポートを超える別のトランスポート機構を提供することができます。JDI のサービスプロバイダインタフェースは、com.sun.jdi.connect.spi パッケージで指定されます。
- コネクタ。コネクタは、フロントエンドとバックエンド間で接続を確立する手段として使用される JDI オブジェクトです。
JPDA では、次の 3 つのコネクタが定義されています。
- 待機コネクタ: フロントエンドが、バックエンドからの着信接続を待機する
- 接続コネクタ: フロントエンドが、すでに実行中のバックエンドに接続する
- 起動コネクタ: フロントエンドが、debuggee コードおよびバックエンドを実行する Java プロセスを実際に起動する
- トランスポート。トランスポートは、フロントエンドとバックエンド間でのビットの移動に使用される、基盤となる機構です。
使用されるトランスポート機構は指定されていませんが、ソケット、シリアル回線、および共用メモリが使用されます。ただし、チャネルを介して転送される直列化ビットストリームの形式およびセマンティクスは、Java Debug Wire Protocol (JDWP) に指定されています。
JDI のサービスプロバイダインタフェースに加え、JPDA には Java TMDebug Wire Protocol Transport Interface というトランスポートライブラリインタフェースも含まれています。トランスポートライブラリは、ターゲット VM の JDWP エージェントによってロードされ、デバッガとの接続の確立、およびデバッガと VM 間の JDWP パケットのトランスポートに使用されます。
これらの SPI の使用方法の詳細は、「JavaTM Platform Debugger Architecture - サービスプロバイダインタフェース」を参照してください。
これらの UI の例は、Java Debug Interface (JDI) のクライアントになっています。
デバッグのために VM から提供する必要のあるサービスを定義します。それには、情報 (たとえば、現在のスタックフレーム) の要求、アクション (たとえば、ブレークポイントの設定)、通知 (たとえば、ブレークポイントに到達したとき) などのサービスが含まれます。デバッガでは、JVMDI 以外の VM 情報 (Java Native Interface (JNI) など) も使用されますが、JVMDI はすべてのデバッガに固有の情報のソースになります。
VM インタフェースを指定すると、VM 実装側からデバッグアーキテクチャに簡単にプラグインすることができます。また、代替通信チャネルを実装することもできます。このインタフェースに準拠しない VM 実装を使用した場合でも、Java Debug Wire Protocol (JDWP) を介してアクセスすることができます。
関連項目:
このプロトコルの仕様によって、debuggee とデバッガのフロントエンドを、異なる VM 実装または異なるプラットフォーム (その両方が異なってもかまわない) で実行できるようになります。さらに、Java 以外の言語で記述されたフロントエンド、またはネイティブ以外の debuggee (Java など) も使用できるようになります。
情報および要求は、多くの場合、Java Virtual Machine Debug Interface (JVMTI) 層のものです。しかし、帯域幅の問題が発生した場合には、必要な情報および要求が追加されることがあります。たとえば、情報のフィルタ処理やバッチ処理などです。
関連項目:
ユーザコードレベルでの情報および要求を定義します。
デバッガの実装側では、Java Debug Wire Protocol (JDWP) が直接使用されるか、Java Virtual Machine Debug Interface (JVMTI) が使用されますが、このJDI インタフェースを使用すると、デバッグ機能を開発環境に簡単に統合することができます。すべてのデバッガ開発で JDI 層を使用することをお勧めします。
関連項目:
Copyright © 2004 Sun Microsystems, Inc.All Rights Reserved.
コメントの送付先: java-debugger@sun.com |