2017-02-20 55 views
0

Я пытаюсь записать состояние приложения, когда в приложении возникает исключение, меня особенно интересуют значения локальной переменной метода (как примитивные, так и пользовательские)? Я просмотрел документацию 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); 

ответ

0

JVM TI GetLocal* функции должны помочь.

+0

Я использовал эти функции, проблема в том, что я получаю задание с использованием функции getlocalObject, я хочу знать, как извлекать поля внутри этого объекта? – kumarD

+0

@kumarD 1. Использование отражения. Вызовите метод Java и передайте ему задание. – apangin

+0

, но для того, чтобы использовать отражение, мне нужно было бы правильно изменить код приложения? Я не хочу изменять код приложения. Я хочу, чтобы решение не зависело от кода приложения, будет ли динамический BCI работать? – kumarD