【发布时间】:2014-03-17 17:16:55
【问题描述】:
有没有办法附加到已经运行的 JVM?
例如,在 JNI 中,您可以使用 JNI_CreateJavaVM 创建 VM 并运行 jar 并检查其所有类..
但是,如果 jar 已经在运行,我无法找到附加到其 JVM 并与其类进行通信或获取其env 指针的方法..
另一个问题是,如果 jar 加载了我的本机库 (.dll) 并且我想在 .dll 中创建一个 JVM,我不能......我也不能在没有 jar 调用我的函数的情况下附加 jar 的当前 JVM。 .
Java 端的示例:
class Foo
{
static {loadLibrary("Foo")}
}
在 C++ 方面:
void Foo()
{
//CreateJVM
//Attach to the current process..
//Call function from the jar that loaded me.
}
如果 jar 首先调用 Foo,这是无法完成的。
有什么想法吗?有没有办法获取当前的 JVM 或附加到它或外部的 jvm 实例?
【问题讨论】:
-
这适用于 windows 或 linux 还是其他一些操作系统?您使用的是哪个 C 调试器/IDE?
-
我可能错过了一些东西,但你不能打开调试端口并附加到它吗?在调试器中点击暂停 VM 并期待一切?
-
我正在使用代码块并且我在 Windows 上。我不确定你打开调试器并点击暂停是什么意思..
-
@CantChooseUsernames 如果您设法使用我的答案,请告诉我。它工作正常。
标签: java c++ jvm java-native-interface