SourceDebugExtension

動機

デバッガアプリケーションは、多くの場合、既存の JavaTM 仮想マシンのクラスファイル属性 (SourceFile、LineNumber、LocalVariable) で配布される以上に、ソースについてのデバッグ情報を必要とします。 これは特に、Java 仮想マシンバイトコードにコンパイルされた他の言語のソースをデバッグする場合に言えることです。 分散環境ではファイルにアクセスできない場合があり、情報がクラスに直接関連付けられている必要があります。

解決法

この解決方法は、文字列を保持するクラスファイル属性を追加するという、簡単で柔軟なものです。この文字列は、 Java Platform Debugger Architecture (JPDA) の 3 つの階層で非透過的にアクセスできるようになっています。 文字列には、展開とベンダ拡張のため、標準形式でデバッグ情報が含まれています。

このドキュメントの以降では、これらの追加の詳細について説明します。

SourceDebugExtension 属性

SourceDebugExtension 属性は、ClassFile 構造体の attributes テーブル内のオプション属性です。 与えられた ClassFile 構造体の attributes テーブル内の SourceDebugExtension 属性は、複数存在することができます。

SourceDebugExtension 属性には次の形式があります。


    SourceDebugExtension_attribute {      u2 attribute_name_index;      u4 attribute_length;      u1 debug_extension[attribute_length];     }
SourceDebugExtension_attribute 構造体の項目は次のとおりです。

attribute_name_index
attribute_name_index 項目の値は、constant_pool テーブルへの有効なインデックスである必要があります。 そのインデックスの constant_pool エントリは、文字列「SourceDebugExtension」を表す CONSTANT_Utf8_info 構造体である必要があります。

attribute_length
attribute_length 項目の値は、属性の長さを示します (最初の 6 バイトを除く)。 したがって、attribute_length 項目の値は、debug_extension[] 項目内のバイト数です。

debug_extension[]
debug_extension 配列は文字列を保持します。文字列は UTF-8 形式である必要があります。 終了文字 0 バイトはありません。

debug_extension 内の文字列は、拡張デバッグ情報として解釈されます。 この文字列の内容は、Java 仮想マシンのセマンティックに影響しません。

JVMDI 関数

Java 仮想マシンデバッグインタフェース (JVMDI) に、次の関数が追加されました。
jvmdiError
GetSourceDebugExtension(jclass clazz, char **sourceDebugExtensionPtr)
clazz で指示されたクラスについて、sourceDebugExtensionPtr を介してデバッグ拡張機能を返します。 返される UTF-8 文字列には、clazz ファイルに存在するデバッグ拡張情報がそのまま含まれます。

パラメータ:

clazz
照会するクラス
sourceDebugExtensionPtr
戻ったとき、クラスのデバック拡張機能名 (UTF-8) へのポインタを参照する。 返されたシグニチャーの文字列は、Deallocate を使って解放する必要がある

この関数は、汎用エラー、または次のエラーのどれかを返します。

JVMDI_ERROR_NULL_POINTER
無効なポインタ

JVMDI_ERROR_INVALID_CLASS
clazz が無効

JVMDI_ERROR_ABSENT_INFORMATION
クラス情報に、デバッグ拡張が含まれていない

JDWP コマンド

Java Debug Wire Protocol (JDWP) の仕様 (ReferenceType コマンドセット) に、次のコマンドが追加されました。
SourceDebugExtension コマンド (12)
この参照型にデバッグ拡張機能を返します。
出力データ
referenceTypeIDrefType参照型 ID
応答データ
stringsourceDebugExtensionデバッグ拡張文字列

JDI メソッド

ReferenceType の Java Debug Interface (JDI) に、次のメソッドが追加されました。
sourceDebugExtension
public String sourceDebugExtension()
                  AbsentInformationException をスロー
デバッグ拡張文字列を取得する
戻り値:
デバッグ拡張文字列
スロー
AbsentInformationException - デバック拡張文字列が指定されていない場合
ObjectCollectedException - この参照型がロードされていない場合

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

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

Sun