JVM -在运行(非仪表化)会话中获取类的实例



我需要通过调用给定类的实例上的特定方法来停止进程。该进程已经运行了一天,如果我强行关闭它,就会损失很多工作。由于API中的错误,GUI被错误地连接,并且没有调用正确的停止函数。我附带了一个交互式Java (Scala)解释器,因此,如果我能够获得进程的实例,我就可以轻松地调用正确的方法。

我不在调试会话中,没有com.sun.jdi。我可以在堆栈跟踪转储中看到实例,但是StackTraceElement不包含实际的实例,只包含类和行号。

在一个正在运行的会话中,没有特定的插装,是否有任何方法可以通过它的类,通过线程转储来获得该实例?

可以使用JVMTI IterateOverInstancesOfClass函数获得给定类的所有实例。请看这个答案中的一个例子。

创建一个JNI库,该库将使用上述函数找到所需的实例,并从JNI_OnLoad条目中调用该实例的方法。然后从解释器控制台调用System.load来加载这个库。

相关内容

  • 没有找到相关文章

最新更新