2012-01-15 55 views
6

我正在寻找潜在的JDI API来在执行期间的任意点上暂停JVM。查看BreakPointRequest createBreakpointRequest方法需要一个特定的位置。是否有任何其他API不需要位置或某种方式来获取可以传递的创建断点的当前位置。JDI:如何在调试器中暂停Java应用程序(JVM)

我基本上寻找一种附加和暂停应用程序的方法,然后使用JVMTI代理接收BreakPoint事件的回调以执行进一步处理。谢谢

+0

你想暂停JVM或应用程序?如果我理解正确,一个jvm可以托管多个应用程序。如果是Jvm,Virtualmachine类,过程方法可能值得您研究。 – kosa 2012-01-15 08:06:08

回答

3

断点才有意义,在源位置。任意暂停应用程序可能是通过暂停当前在JVM中运行的所有线程来完成的。看看SuspendThreadList()SuspendThreadjvmti。这种机制将是你正在寻找的'暂停'。

1

如果您想用JDI任意暂停正在运行的jvm,则可以使用JDI VirtualMachine接口的suspend方法。

但是,这并不能真正为您提供连接到jvmti代理的能力;正如另一个答案指出的那样,jvmti有自己的方法来做同样的事情。

如果您正在寻找一种方法来定义断点的任意回调,而不是呼叫特定的代理,那么您可能会对jdiscript感兴趣,它是JDI的一个脚本层,可让您执行此类操作非常容易使用直接的Java,而不必进入C++。