【问题标题】:JDI: How to pause a Java application (JVM) like in the debuggerJDI:如何在调试器中暂停 Java 应用程序 (JVM)
【发布时间】:2012-02-10 15:45:34
【问题描述】:

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

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

【问题讨论】:

  • 您想停止 JVM 或应用程序吗?如果我理解正确,一个 jvm 可能会托管多个应用程序。如果是 Jvm,Virtualmachine 类,进程方法可能值得为您的需求研究。

标签: java jvmti jdi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    如果您正在寻找一种方法来定义断点的任意回调,而不是调用特定代理,您可能会对jdiscript 感兴趣,它是一个围绕 JDI 的脚本层,可让您执行此操作使用纯 Java 很容易,而不必使用 C++。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-27
        • 2011-07-08
        • 2014-03-07
        • 1970-01-01
        • 1970-01-01
        • 2016-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多