6

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

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

4

3 回答 3

4

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

于 2012-01-17T17:53:04.223 回答
1

如果您想通过 JDI 任意暂停正在运行的 jvm,您将使用 JDI VirtualMachine 接口的挂起方法。

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

如果您正在寻找一种为断点定义任意回调的方法,而不是调用特定代理,您可能会对jdiscript感兴趣,它是围绕 JDI 的脚本层,可让您直接轻松地执行此类操作Java,而不必陷入 C++。

于 2014-03-20T16:53:02.660 回答
0

我认为jdb - The Java Debugger将是最好的选择。请检查有关的网址jdb

http://docs.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html

于 2012-01-17T17:21:47.670 回答