Java

JavaTM 2 SDK, v1.4 での JPDA の拡張機能

JPDA ガイドに戻る
バージョン 1.4 の Java 2 SDK では、次の JPDA の機能が追加されています。
フルスピードでのデバッグ
HotSwap クラスファイルの置換を可能にする
インスタンス フィルタ
他の言語のデバッグをサポート
VMDeathRequests

フルスピードでのデバッグ

Java HotSpot[TM] 仮想マシンは、「フルスピードでのデバッグ」を行います。 旧バージョンの HotSpot では、デバッグが有効にされている場合、プログラムはインタプリタのみを使用して実行していました。 このバージョンでは、HotSpot テクノロジのパフォーマンス面の利点を、デバッグが有効な状態で動作しているプログラムにおいて活かすことができます。 パフォーマンスが向上すると、長時間動作するプログラムをより簡単にデバッグできるようになります。 また、テストをフルスピードで実行し、例外に対しデバッグを起動できます。
-Xrunjdwp:transport=dt_socket,server=y,onuncaught=y,launch=myDebuggerLaunchScript
「onthrow」および「onuncaught」の起動の詳細については、「接続および呼び出しの詳細」を参照してください。 ブレークポイントを設定して禁止できるのは、ブレークポイントを含むメソッドのコンパイル (フルスピード実行) のみです。 シングルステッピングのようなデバッグ処理中、および「メソッドに入る」または「メソッドから出る」、あるいはウォッチポイントが設定されているとき、実行はインタプリタに戻ります。

現在、フルスピードデバッグを利用できるのは、クライアント (デフォルト) コンパイラだけです。

HotSwap クラスファイルの置換を可能にする

この新機能は、動作中のアプリケーションの修正したコードをデバッガの API を介して置き換える機能をカプセル化します。 たとえば、1 つのクラスをコンパイルし直して、古いインスタンスを新しいインスタンスに置き換えることができます。

この変更は、次の課題に対応することを目的としています。

  • Tool (IDE) ベンダーが望む、修正継続 (fix-and-continue) 方式のデバッグ機能。 つまり、デバッグによって問題を識別した後、その問題を修正し、修正されたコードのデバッグを続行する
  • 長時間動作するサーバを展開している組織では、サーバをダウンさせずにバグを修正することが望まれる

この HotSwap 機能により、JavaTM Platform Debugger Architecture (JPDA) では、デバッガの制御のもとにクラスを更新できるようになります。 この機能で中心的な役割を果たす 2 つのコンポーネントは、RedefineClasses と PopFrame です。RedefineClasses はクラス定義を置き換え、PopFrame は定義し直されたメソッドの再実行を可能にするためのスタックフレームをポップします。

リファレンス実装では、この機能は、Java Virtual Machine Debug Interface (JVMDI) 層で実装されており、JPDA の上位層である Java Debug Wire Protocol (JDWP) および Java Debug Interface (JDI) を介して利用できます。

再定義機能
JDI VirtualMachine.redefineClasses(Map classToBytes)
JDWP RedefineClasses (Cmd 18) in VirtualMachine (CmdSet 1)
JVMDIRedefineClasses(jint classCount, JVMDI_class_definition *classDefs)

Pop Frame 機能
JDI ThreadReference.popFrames(StackFrame frame)
JDWPPopFrames (Cmd 4) in StackFrame (CmdSet 16)
JVMDIPopFrame(jthread thread)

各層のすべての機能は、それぞれ独立したオプションになっています。 GetCapabilities 機能 (JVMDI 層)、 CapabilitiesNew コマンド (JDWP 層)、 canRedefineClasses canAddMethod canUnrestrictedlyRedefineClasses canPopFrames の各メソッド (JDI 層) は、どの機能が実装されているかを記述します。

この変更に関するバグ報告については、4287595 を参照してください。

インスタンスフィルタ

BreakpointRequestMethodExitRequestExceptionRequestStepRequestWatchpointRequest、および MethodEntryRequest の各クラスに、addInstanceFilter メソッドを使ってインスタンスフィルタを追加する機能が用意されました。 インスタンスフィルタは、要求によって生成されるイベントを、現在実行中のインスタンスが指定されたオブジェクトであるイベントだけに制限します。

他の言語のデバッグをサポート
Java プログラミング言語ソースに翻訳されている Java 以外のプログラミング言語を後でデバッグできるようにするため、Java Platform Debugger Architecture の拡張が行われています。 次の表は、新しい API と、コメントが変更された API をまとめたものです。 この情報は SourceDebugExtension に基づいています。

新しい API コメントが変更された API
JVMDI
GetSourceDebugExtension  
JDWP - ReferenceType (2) コマンドセット
SourceDebugExtension コマンド (12)  
JDWP - VirtualMachine (1) コマンドセット
SetDefaultStratum コマンド (19)  
JDI - VirtualMachine インタフェース
void setDefaultStratum(String stratum)  
String getDefaultStratum()  
JDI - ReferenceType インタフェース
String sourceNames(String stratum) String sourceName()
String sourcePaths(String stratum)  
List allLineLocations(String stratum, String sourceName) List allLineLocations()
List locationsOfLine(String stratum, String sourceName, int lineNumber) List locationsOfLine(int lineNumber)
List availableStrata()  
String defaultStratum()  
String sourceDebugExtension()  
JDI - Method インタフェース
List allLineLocations(String stratum, String sourceName) List allLineLocations()
List locationsOfLine(String stratum, String sourceName, int lineNumber) List locationsOfLine(int lineNumber)
JDI - Location インタフェース
  クラスコメント (ストラタ定義済み)
int lineNumber(String stratum) int lineNumber()
String sourceName(String stratum) String sourceName()
String sourcePath(String stratum)  
String sourcePath()  

VMDeathRequests
VMDeathRequest クラスを使うと、ターゲット VM が終了したときに通知するよう要求できます。 使用可能な VMDeathRequest の条件が満たされると、VMDeathEvent を含む EventSetEventQueue に置かれます。

VMDeathRequest を作成しない場合でも、1 つの要求されていない VMDeathEvent が、SUSPEND_NONE という中断ポリシーとともに送られます。 通常、この要求は、SUSPEND_ALL という中断ポリシーとともに VMDeathEvent を送るために作成されます。 このイベントは、VM が稼動していることが必要な処理 (たとえば、イベント処理) の完了を確認するために利用できます。 注: その場合も、要求されていない VMDeathEvent は送られます。


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

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