JDI:如何在调试器中暂停Java应用程序(JVM)

时间:2012-01-15 04:24:56

标签: java jvmti jdi

我正在寻找可能的JDI API来在执行期间的任意点暂停JVM。查看BreakPointRequest createBreakpointRequest方法需要一个特定的位置。是否有任何其他API不需要位置或某种方式来获取可以传递以创建断点的当前位置。

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

3 个答案:

答案 0 :(得分:3)

断点仅适用于源中的位置。任意暂停应用程序最好通过挂起当前在JVM中运行的所有线程来完成。请查看SuspendThreadList()中的SuspendThreadjvmti。这种机制将是你正在寻找的“暂停”。

答案 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