JDI:デバッガーのように Java アプリケーション (JVM) を一時停止する方法
質問
JVM の実行中の任意の時点で JDI API を一時停止できる可能性のあるものを探しています。見てみると、 ブレークポイントリクエスト createBreakpointRequest メソッドには特定の場所が必要です。場所を必要としない、またはブレークポイントを作成するために渡すことができる現在の場所を取得するための他の API はありますか。
私は基本的に、アプリケーションをアタッチして一時停止し、JVMTI エージェントを使用して BreakPoint イベントのコールバックを受信してさらなる処理を実行する方法を探しています。ありがとう
解決
ブレークポイントは、ソース内の場所でのみ意味を持ちます。アプリケーションを任意に一時停止するには、JVM で現在実行中のすべてのスレッドを一時停止するのが最も効果的です。を見てみましょう SuspendThreadList()
または SuspendThread
で jvmti. 。このメカニズムは、あなたが探している「一時停止」になります。
他のヒント
JDI で実行中の JVM を任意に一時停止したい場合は、JDI VirtualMachine インターフェイスの つるす 方法。
ただし、jvmti エージェントに接続できるという点では、これは実際にはあまり役に立ちません。他の回答が指摘しているように、jvmti には同じことを行うための独自のメソッドがあります。
特定のエージェントを呼び出すのではなく、ブレークポイントに任意のコールバックを定義する方法を探している場合は、次のことに興味があるかもしれません。 jdiscript, これは、C++ にドロップするのではなく、そのままの Java でこのようなことを非常に簡単に実行できる JDI 周辺のスクリプト層です。
私は思う jdb - The Java Debugger
が最良の選択肢となるでしょう。についてはURLをご確認ください。 jdb
http://docs.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html