- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我尝试寻找解决问题的方法已经有一段时间了,但没有得到任何有用的结果。所以想请教专家一些建议。
我正在使用 JVMTI 编写一个代理,其中我需要获取某些方法的局部变量信息。以下是我所做的总结:
(1)开启相应能力。
JNIEXPORT jint JNICALL
Agent_OnLoad(JavaVM *jvm, char *options, void *reserved)
{
...
jvmtiCapabilities capa = {0};
...
capa.can_access_local_variables = 1;
...
}
(2) 在运行阶段(在我的例子中,是 VMInit
事件的处理程序),通过 JNI
获取 jclass
FindClass()
,然后通过JNI
GetMethodID()
获取jmethodID
(当然,如果是静态方法的话,我使用GetStaticMethodID()
)。每一步都检查一下,jclass
和jmethodID
都没有问题。
(3) 然后,我尝试获取局部变量表。
...
jvmtiLocalVariableEntry *entTab = NULL;
jint entCnt = 0;
jvmtiError errNum = jvmti->GetLocalVariableTable(mthID, &entCnt, &entTab);
...
我检查了errNum,发现每次都是JVMTI_ERROR_ABSENT_INFORMATION。我还在其他事件处理程序中尝试过此操作,其行为相同。
有什么想法或建议吗?
谢谢!
最佳答案
JVMTI_ERROR_ABSENT_INFORMATION 错误表明您尝试为其加载局部变量表的方法没有正确的 LocalVariableTable对应文件中的属性。
如果您有权访问原始源代码,则可以使用 -g
选项使用 javac
对其进行编译来生成它。
如果你只是想获取方法签名信息,可以尝试GetMethodName功能。否则,您需要获取包含相关方法的堆栈帧,并且可以使用 GetLocal* 检索所有局部变量的值。通过传入槽号。
关于java - JVMTI GetLocalVariableTable() 总是给出 JVMTI_ERROR_ABSENT_INFORMATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47877351/
首先,我尝试寻找解决问题的方法已经有一段时间了,但没有得到任何有用的结果。所以想请教专家一些建议。 我正在使用 JVMTI 编写一个代理,其中我需要获取某些方法的局部变量信息。以下是我所做的总结: (
我是一名优秀的程序员,十分优秀!