我需要通过调用给定类的实例上的特定方法来停止进程。该进程已经运行了一天,如果我强行关闭它,就会损失很多工作。由于API中的错误,GUI被错误地连接,并且没有调用正确的停止函数。我附带了一个交互式Java (Scala)解释器,因此,如果我能够获得进程的实例,我就可以轻松地调用正确的方法。
我不在调试会话中,没有com.sun.jdi。我可以在堆栈跟踪转储中看到实例,但是StackTraceElement
不包含实际的实例,只包含类和行号。
可以使用JVMTI IterateOverInstancesOfClass
函数获得给定类的所有实例。请看这个答案中的一个例子。
创建一个JNI库,该库将使用上述函数找到所需的实例,并从JNI_OnLoad
条目中调用该实例的方法。然后从解释器控制台调用System.load
来加载这个库。