0
我想在應用程序中發生異常時記錄應用程序的狀態,我特別感興趣的方法局部變量值(雙方原始和用戶定義)?我已經閱讀了ASM 5.1的文檔,但是我找不到可以讓我訪問這些值的任何接口?有沒有辦法做到這一點,如果不使用ASM是否有任何其他接口,讓我這樣做?該解決方案應該獨立於應用程序,它應該是即插即用型解決方案,使用它我應該能夠將其插入任何Java應用程序。使用JNI如何在使用ASM庫的方法中訪問用戶定義對象變量的方法變量值和值?
獲取字段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);
我已經使用這些函數,問題是我得到一個jobject使用getlocalObject函數,我想知道如何提取該對象內的字段? – kumarD
@kumarD 1.使用反射。調用Java方法並將給定的'jobject'傳遞給它。 – apangin
但爲了使用反射我將不得不修改應用程序代碼嗎?我不想修改應用程序代碼。我想要一個獨立於應用程序代碼的解決方案,動態BCI能夠工作嗎? – kumarD