Java Platform Debugger Architecture
Java SE 1.4の拡張機能

JDKのバージョン1.4ファミリには、次のJPDA拡張機能が含まれています。

フル・スピード・デバッグ

Java HotSpot仮想マシンでは、「フル・スピード・デバッグ」が使用されるようになりました。旧バージョンのHotSpotでは、デバッグが有効にされている場合、プログラムはインタプリタのみを使用して実行していました。このバージョンでは、HotSpotテクノロジのパフォーマンス面の利点を、デバッグが有効な状態で動作しているプログラムにおいて活かすことができます。パフォーマンスが向上すると、長時間動作するプログラムをより簡単にデバッグできるようになります。また、フル・スピードでテスティングを行ったり、例外上でデバッガを起動できるようになりました。

        -Xrunjdwp:transport=dt_socket,server=y,onuncaught=y,launch=myDebuggerLaunchScript

「onthrow」の起動および「onuncaught」の起動の詳細は、「接続および呼出しの詳細」を参照してください。ブレークポイントを設定しても、ブレークポイントを含むメソッドのコンパイル(フル・スピード実行)が抑制されるだけです。実行は、シングルステップ実行などの一部のデバッグ操作時、およびメソッドの入口/出口またはウォッチポイントの設定時にインタプリタに戻ります。

バージョン1.4.1以降、フル・スピード・デバッグはJava HotSpot Client VM (デフォルト)とJava HotSpot Server VM (-serverコマンド行フラグで起動)の両方で使用できます。JDK 1.4.0では、フル・スピード・デバッグはJava HotSpot Client VMのみで使用可能でした。

「HotSwap」クラス・ファイル置換の有効化

これは、デバッガAPIを使用して実行中のアプリケーションで変更されたコードを置き換える機能をカプセル化する新機能です。たとえば、単一のクラスを再コンパイルし、古いインスタンスを新しいインスタンスに置き換えることができます。

この変更は、次のような問題に対処するために行われました。

HotSwapによって、デバッガの制御下でクラスを更新できる機能がJava Platform Debugger Architecture (JPDA)に追加されます。この機能の中心的なコンポーネントは、クラス定義を置き換えるRedefineClassesと、再定義されたメソッドを再実行できるようにスタックからフレームをポップするPopFrameの2つです。

リファレンス実装では、この機能は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)
JVMDI RedefineClasses(jint classCount, JVMDI_class_definition *classDefs)

 

フレームのポップ機能
JDI ThreadReference.popFrames(StackFrame frame)
JDWP PopFrames (Cmd 4) in StackFrame (CmdSet 16)
JVMDI PopFrame(jthread thread)

各層の機能はすべて独立したオプションです。JVMDI層のGetCapabilities関数、JDWP層のCapabilitiesNewコマンド、JDI層のcanRedefineClassescanAddMethodcanUnrestrictedlyRedefineClasses、およびcanPopFramesメソッドには、どの機能が実装されているのかが記述されています。

この変更に関するバグ報告については、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)  
JDK - VirtualMachine I/F void setDefaultStratum(String stratum)  
JDK - VirtualMachine I/F String getDefaultStratum()  
JDI - ReferenceType I/F String sourceNames(String stratum) String sourceName()
JDI - ReferenceType I/F String sourcePaths(String stratum)  
JDI - ReferenceType I/F List allLineLocations(String stratum, String sourceName) List allLineLocations()
JDI - ReferenceType I/F List locationsOfLine(String stratum, String sourceName, int lineNumber) List locationsOfLine(int lineNumber)
JDI - ReferenceType I/F List availableStrata()  
JDI - ReferenceType I/F String defaultStratum()  
JDI - ReferenceType I/F String sourceDebugExtension()  
JDK - Method I/F List allLineLocations(String stratum, String sourceName) List allLineLocations()
JDK - Method I/F List locationsOfLine(String stratum, String sourceName, int lineNumber) List locationsOfLine(int lineNumber)
JDI - Location I/F   クラス・コメント(strata定義済み)
JDI - Location I/F int lineNumber(String stratum) int lineNumber()
JDI - Location I/F String sourceName(String stratum) String sourceName()
JDI - Location I/F String sourcePath(String stratum)  
JDI - Location I/F String sourcePath()  

VMDeathRequests

VMDeathRequestクラスを使用すると、ターゲットVM終了時の通知要求を行うことができます。有効なVMDeathRequestが満たされると、VMDeathEventを含むEventSetEventQueueに置かれます。

VMDeathRequestを作成しない場合でも、SUSPEND_NONEsuspend policyとともに非要請VMDeathEventが1つ送信されます。

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


Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.