Java

JavaTM Platform Debugger Architecture

ホームページ

アーキテクチャの概要

JavaTM Platform Debugger Architecture の構成は次のとおりです。
             コンポーネント                         デバッガインタフェース

                /    |--------------|
               /     |     VM       |
 debuggee ----(      |--------------|  <------- JVMTI - Java VM Tool Interface
               \     |  バックエンド |
                \    |--------------|
                /           |
 通信チャネル  -(            |  <--------------- JDWP - Java Debug Wire Protocol
                \           |
                     |--------------|
                     |フロントエンド |
                     |--------------|  <------- JDI - Java Debug Interface
                     |      UI      |
                     |--------------|

Java Platform Debugger Architecture (JPDA) とは何か

JPDA は、複数のプラットフォーム、仮想マシン (VM) 実装、および JDK バージョン間で高い移植性を持つデバッガアプリケーションを、ツール開発者が容易に作成できるようにする多層デバッグアーキテクチャです。

JPDA は、次の 3 つの階層で構成されます。

JVMTI - Java VM Tool Interface
JVMTI は、JVMDI に置き換わるものとして J2SE 5.0 に導入された新しいインタフェースです。VM が提供するデバッグサービスを定義します。
JDWP - Java Debug Wire Protocol
debuggee とデバッガのプロセス間で行われる通信を定義します。
JDI - Java Debug Interface
高レベルの Java 言語インタフェースを定義します。これを使用することにより、ツール開発者は、リモートデバッガアプリケーションを容易に記述できます。

リファレンス実装

これらのインタフェースの仕様に加え、Sun Microsystems はリファレンス実装も提供します。リファレンス実装は、次のようなコンポーネントで構成されます。 結果として、任意の層を置換可能な多層実装が提供されます。

JPDA の使用

デバッガ開発者は、任意の層で JPDA にアクセスできます。JDI はもっとも高レベルかつ使いやすいインタフェースであるため、開発者の方に JDI の使用をお勧めします。企業が JDI を使ってデバッガを開発する場合を考えてみましょう。JDI は、リファレンス実装とともに使用でき、また VM および Sun がサポートするプラットフォームで自動的に機能します。さらに、たとえば、リファレンス実装のフロントエンドと、JDWP を実装する他社の VM (JVMTI を使用しても省略してもよい) で動作している debuggee でも機能します。

デバッガの中には、より低い層である JDWP (フロントエンドが Java で記述されていない場合) や JVMTI (低レベルの機能を必要とする特殊なデバッガの場合) の上に構築されるものもあります。


コンポーネント

debuggee

Java 仮想マシン (VM)

バックエンド

通信チャネル

通信チャネルは、デバッガのフロントエンドおよびバックエンド間のリンクです。これは、次の 2 つの機構で構成されていると考えることができます。

  1. コネクタ。コネクタは、フロントエンドとバックエンド間で接続を確立する手段として使用される JDI オブジェクトです。

    JPDA では、次の 3 つのコネクタが定義されています。

    • 待機コネクタ: フロントエンドが、バックエンドからの着信接続を待機する
    • 接続コネクタ: フロントエンドが、すでに実行中のバックエンドに接続する
    • 起動コネクタ: フロントエンドが、debuggee コードおよびバックエンドを実行する Java プロセスを実際に起動する

  2. トランスポート。トランスポートは、フロントエンドとバックエンド間でのビットの移動に使用される、基盤となる機構です。

    使用されるトランスポート機構は指定されていませんが、ソケット、シリアル回線、および共用メモリが使用されます。ただし、チャネルを介して転送される直列化ビットストリームの形式およびセマンティクスは、Java Debug Wire Protocol (JDWP) に指定されています。
J2SE 5.0 から、JPDA にはサービスプロバイダインタフェースが含まれており、これを使うと、コネクタやトランスポートの実装を開発および配置できます。これらのサービスプロバイダインタフェースにより、デバッガやほかのツールベンダーで新しいコネクタ実装を開発し、Sun が提供するソケットおよび共用メモリトランスポートを超える別のトランスポート機構を提供することができます。JDI のサービスプロバイダインタフェースは、com.sun.jdi.connect.spi パッケージで指定されます。

JDI のサービスプロバイダインタフェースに加え、JPDA には Java TMDebug Wire Protocol Transport Interface というトランスポートライブラリインタフェースも含まれています。トランスポートライブラリは、ターゲット VM の JDWP エージェントによってロードされ、デバッガとの接続の確立、およびデバッガと VM 間の JDWP パケットのトランスポートに使用されます。

これらの SPI の使用方法の詳細は、「JavaTM Platform Debugger Architecture - サービスプロバイダインタフェース」を参照してください。

フロントエンド

ユーザインタフェース (UI)

 


デバッガインタフェース

Java Virtual Machine Tool Interface (JVMTI)

Java Debug Wire Protocol (JDWP)

Java Debug Interface (JDI)


Copyright © 2004 Sun Microsystems, Inc.All Rights Reserved. 

コメントの送付先: java-debugger@sun.com 

Sun