デバッガ:デバッグ環境の実例

デバッガ:デバッグ環境の実例

「デバッグAPI」と「デバッグ環境」を区別する理由はどこにもありません。しいて言えばAPIがたくさんあるので単なるAPIではなく、もう少し大きな意味での「環境」という言葉を使いたかったためにこうしました。単にページを分けたかったというのもあります。


Javaのデバッグ環境

Javaのデバッグ環境には、その総称として JPDA = Java Platform Debugger Architecture と名づけられています。

Java Platform Debugger Architecture リファレンス

基本的なアーキテクチャ

JPDAは基本的に以下の三つのインターフェースから構成されています。

 
     デバッギ     dllやsoなどのオブジェクト                           デバッガ側                                         
 |--------------|    |----------------|                  |----------------||---------------|
 |              |    |                |                  |                ||               |
 | JVM TIを持つ | - |  バックエンド  | JDWPを使った通信 | フロントエンド || JDIを利用した |
 |    JavaVM    |    |                |      ←-→      |   (JDIを実装)  ||   プログラム  |
 |              |    |                |                  |                ||               |
 |--------------|    |----------------|                  |----------------||---------------|
 

図示するとこのようになります。バックエンドが別のオブジェクトになっているのは JavaVMの実装がいくつもあることや、バックエンドが常には必要ないことに由来していると思われます。 前者はバックエンドをいくつも作るのは無駄なので、共通化できるところは共通化してしまおうという話です。 また、後者の理由によりバックエンドは常に起動されるとは限らないため、Javaでデバッグされるプロセスを起動する場合にはいつも付加的なオプションを用いる必要があります。

JDIはデバッガ側からみると、デバッギプロセスのリモートビューとなります。

重要だと思われる点

関数やクラスがたくさんありすぎて正直何を書けばいいのか分かりません(^^; リファレンスを見た方が早いので必要ないかもしれませんが、一応重要だと思われる点をまとめてみます。

JVM TI

JDWP

 
 typedef struct {
     jint len; 
     jint id;
     jbyte flags;
     jbyte cmdSet;
     jbyte cmd;
     jbyte *data;
 } jdwpCmdPacket;
 
 typedef struct {
     jint len;
     jint id;
     jbyte flags;
     jshort errorCode;
     jbyte *data;
 } jdwpReplyPacket;
 
 typedef struct jdwpPacket {
     union {
         jdwpCmdPacket cmd;
         jdwpReplyPacket reply;
     } type;
 } jdwpPacket;
 

JDI


Last modified : 2009/01/30 12:08:06 UTC