Я пытаюсь записать состояние приложения, когда в приложении возникает исключение, меня особенно интересуют значения локальной переменной метода (как примитивные, так и пользовательские)? Я просмотрел документацию ASM 5.1, но я не смог найти какие-либо интерфейсы, которые позволят мне получить доступ к значениям? есть ли способ сделать это, если не использовать ASM, есть ли какие-либо другие Интерфейсы, которые позволили бы мне это сделать? Решение должно быть независимым от приложения, оно должно быть решением типа plug and play, с использованием которого я должен подключить его к любому java-приложению.Как получить доступ к значениям переменных метода и значениям определяемых пользователем переменных объекта внутри метода с использованием библиотеки ASM?
Получение Идентификаторы полей с использованием JNI:
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);
Я использовал эти функции, проблема в том, что я получаю задание с использованием функции getlocalObject, я хочу знать, как извлекать поля внутри этого объекта? – kumarD
@kumarD 1. Использование отражения. Вызовите метод Java и передайте ему задание. – apangin
, но для того, чтобы использовать отражение, мне нужно было бы правильно изменить код приложения? Я не хочу изменять код приложения. Я хочу, чтобы решение не зависело от кода приложения, будет ли динамический BCI работать? – kumarD