Java / JVMTI:在 Agent_OnLoad(JavaVM, char*, void) 中使用 JavaVM 参数

Java / JVMTI: Usage of JavaVM-parameter in Agent_OnLoad(JavaVM, char*, void)

我目前是第一次使用 JVMTI。

如果出现任何问题,我主要使用 JVM(TM) Tool Interface Documentation

但我无法找到的是:除了通过调用 GetEnv(...) 获取环境 之外,JavaVM 参数可以用来什么?这是唯一的目的吗?

我无法找到关于 JavaVM class 本身或特别是关于此参数的任何进一步文档。可能我只是瞎了眼,有人可以为我指明正确的方向(解释、文档、教程等)。

这里有一些典型的参数使用示例代码:

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {
  jvmtiEnv              *jvmti;
  jvmtiError             error;
  jint                   res;
  jvmtiCapabilities      capabilities;
  jvmtiEventCallbacks    callbacks;

  res = (*vm)->GetEnv(vm, (void **)&jvmti, JVMTI_VERSION_1);
  // Here the code goes on
}

JavaVM 结构是 Java Invocation API.

的一部分

它包含以下功能:

  • GetEnv
  • 销毁 JavaVM
  • 附加当前线程
  • AttachCurrentThreadAsDaemon
  • 分离当前线程