0
응용 프로그램 내에서 예외가 발생할 때 응용 프로그램의 상태를 기록하려고합니다. 특히 메서드 로컬 변수 값 (원시 및 사용자 정의 모두)에 관심이 있습니까? ASM 5.1의 설명서를 읽었지만 값에 액세스 할 수있는 인터페이스를 찾을 수 없습니까? 거기에 ASM을 사용하지 않는다면 다른 인터페이스를 사용하면이 작업을 수행 할 수 있습니까? 솔루션은 응용 프로그램과 독립적이어야하며 플러그 앤 플레이 유형 솔루션이어야하며 Java 응용 프로그램에 플러그 할 수 있어야합니다. JNI를 사용하여ASM 라이브러리를 사용하는 메소드에서 메소드 변수 값과 사용자 정의 오브젝트 변수 값에 액세스하는 방법은 무엇입니까?
얻기 필드 IDS :
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 함수를 사용하여 jobject를 얻었고,이 객체 내의 필드를 추출하는 방법을 알고 싶습니까? – kumarD
@kumarD 1. 리플렉션 사용. Java 메소드를 호출하고 주어진'jobject'를 전달합니다. – apangin
하지만 반사를 사용하려면 응용 프로그램 코드를 수정해야합니다. 나는 응용 프로그램 코드를 수정하고 싶지 않다. 응용 프로그램 코드와 독립적 인 솔루션을 원한다면 동적 BCI가 작동합니까? – kumarD