我正在寻找可能的JDI API来在执行期间的任意点暂停JVM。查看BreakPointRequest createBreakpointRequest方法需要一个特定的位置。是否有任何其他API不需要位置或某种方式来获取可以传递以创建断点的当前位置。
我基本上是在寻找一种附加和暂停应用程序的方法,然后使用JVMTI代理接收BreakPoint事件的回调以执行进一步处理。感谢
答案 0 :(得分:3)
断点仅适用于源中的位置。任意暂停应用程序最好通过挂起当前在JVM中运行的所有线程来完成。请查看SuspendThreadList()
中的SuspendThread
或jvmti。这种机制将是你正在寻找的“暂停”。
答案 1 :(得分:1)
如果你想用JDI任意暂停正在运行的jvm,你可以使用JDI VirtualMachine接口的suspend方法。
然而,就能够连接到jvmti代理而言,这并没有给你太多帮助;正如另一个答案所指出的那样,jvmti有自己的方法来做同样的事情。
如果您正在寻找一种为断点定义任意回调的方法,而不是呼叫特定代理,您可能会对jdiscript感兴趣,{{3}}是围绕JDI的脚本层,让你可以在简单的Java中轻松地完成这些工作,而不必放入C ++。
答案 2 :(得分:0)
我认为jdb - The Java Debugger
将是最佳选择。
请查看有关jdb
http://docs.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html