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