我试图在应用程序中发生异常时记录应用程序的状态,我特别感兴趣的是方法局部变量值(原始和用户定义)?我已经阅读了ASM 5.1的文档,但是我找不到任何可以访问这些值的接口?有没有办法做到这一点,如果不使用ASM是否有任何其他接口可以让我这样做?解决方案应该独立于应用程序,它应该是即插即用型解决方案,使用它我应该能够将其插入任何Java应用程序。
使用JNI获取Field ID:
char *klazName;
error = (*jvmti)->GetLocalObject(jvmti, thread, i,
table_ptr[j].slot, &value_ptr);
check_jvmti_error(jvmti, error,
"Cannot Get Local Variable Object");
if(!error){
klaz = (*env)->GetObjectClass(env,value_ptr);
error = (*jvmti)->GetClassSignature(jvmti, klaz,
&klazName, NULL);
if(strstr(klazName,"String")!=NULL){
printf("...%s\n",klazName);
field = (*env)->GetFieldID(env,declaring_class_ptr,table_ptr[j].name,"S");
value = (jstring)(*env)->GetObjectField(env,value_ptr,field);
stringVal = (*env)->GetStringUTFChars(env,value,0);
printf("Value of Field %s is .\n", stringVal);