【问题标题】:JVMTI get name of called Class/FileJVMTI 获取被调用类/文件的名称
【发布时间】:2011-10-25 21:30:30
【问题描述】:

我尝试通读整个 jvmti 文档,但没有找到解决问题的方法。

我想获取命令行中用来调用程序的类/文件的名称:

java -agentpath:<pathToAgent> <calledJavaProgram>

在大写的情况下,我想获得 的名称。

GetSourceFileName(jclass klass,...) 只获取参数列表中设置的“klass”的名称,但自从我启动程序后,我什至不知道这个...对吗?

有(其他)方法可以得到这个名字吗?

感谢您的帮助 马库斯 G.

【问题讨论】:

  • 我发现,JNI.h 提供了一个名为 JavaVMInitArgs 的结构,用于使用代理创建新的 JVM。但是我需要准确地获取我启动代理的当前正在运行的 jvm 的信息......有什么想法吗?

标签: java filenames agent classname jvmti


【解决方案1】:

根据JNI 文档,JavaVMInitArgs 结构用于从本机代码创建新虚拟机,所以我认为这是一个红鲱鱼。 AFAIK 在 JVMTI 或 Java 中都没有 API 访问命令行参数。

您可以做一些事情来使用 main 方法找出类的名称:

  1. 使用JNI调用works it out的Java方法。
  2. 使用 BCI 修改所有主要方法并对您的代理进行 JNI 回调,第一个被调用的就是您想要的。这也允许您获取args[] 数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2012-03-24
    • 1970-01-01
    • 2011-05-08
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多