我试图通读整个 jvmti 文档,但没有找到解决问题的方法。
我想获取在命令行中用于调用程序的类/文件的名称:
java -agentpath:<pathToAgent> <calledJavaProgram>
在大写的情况下,我想获取 < calledJavaProgram > 的名称。
GetSourceFileName(jclass klass,...) 只给我在参数列表中设置的“klass”的名称,但自从我启动程序后我什至不知道这个...对吧?
是否有(其他)方法获得此名称?
谢谢你的帮助 马库斯 G.
最佳答案
根据JNI文档中,JavaVMInitArgs
结构用于从 native 代码创建新的 VM,所以我认为这是一个转移注意力的问题。据我所知,在 JVMTI 或 Java 中都没有 API 访问命令行参数。
你可以做一些事情来使用 main 方法找出类的名称:
- 使用 JNI 调用一个 Java 方法 works it out .
- 使用 BCI 修改所有主要方法并对您的代理执行 JNI 回调,第一个被调用的就是您想要的那个。这还允许您获取
args[]
数组。
关于java - JVMTI 获取被调用类/文件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041926/