我需要通过在给定类的实例上调用特定方法来停止进程。这个进程已经运行了一天,如果我硬关闭它,我会失去很多工作。由于 API 中的一个错误,GUI 连接错误并且没有调用正确的停止函数。我附加了一个交互式 Java (Scala) 解释器,所以如果我能掌握流程的实例,我就可以轻松调用正确的方法。
我不在调试 session 中,没有com.sun.jdi。我可以在堆栈跟踪转储中看到该实例,但 StackTraceElement
不包含实际实例,仅包含类和行号。
在没有特定检测的情况下,在运行的 session 中是否有任何方法可以通过它的类,通过线程转储来获取该实例?
最佳答案
可以使用 JVMTI 获取给定类的所有实例 IterateOverInstancesOfClass
功能。请参阅 this answer 中的示例.
创建一个 JNI 库,它将使用上述函数找到所需的实例,并从 JNI_OnLoad
调用它的方法入口。然后从解释器控制台调用 System.load
来加载这个库。
关于java - JVM - 在正在运行的(非检测的) session 中获取类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40102428/