Java 继承字段上的JDI-ObjectReference.setValue()
我正在使用JDI调试一个程序。我试图更改某个ObjectReference中某个字段的值。我有Field对象,因为我可以通过Java 继承字段上的JDI-ObjectReference.setValue(),java,jdi,Java,Jdi,我正在使用JDI调试一个程序。我试图更改某个ObjectReference中某个字段的值。我有Field对象,因为我可以通过 ObjectReference.referencetype().allFields() 但是,我不能使用 ObjectReference.setValue(Field paramField, Value paramValue) 因为这只适用于此类或其直接超类中的字段,所以不包括层次结构中更高的类 是否可以更改高于直接超类的类中字段的值? 如果是这样的话,我将非常感谢您
ObjectReference.referencetype().allFields()
但是,我不能使用
ObjectReference.setValue(Field paramField, Value paramValue)
因为这只适用于此类或其直接超类中的字段,所以不包括层次结构中更高的类
是否可以更改高于直接超类的类中字段的值?
如果是这样的话,我将非常感谢您的帮助
谢谢,
院长
编辑:在调用ObjectReference.setValue()的行中抛出以下错误:
使用org.apache.commons.beanutils.PropertyUtils,您甚至可以获得/设置如下继承字段:
PropertyUtils.getNestedProperty(obj, "property")
适用于所有字段,无论该字段在层次结构中有多高
例如:
public class AClass {
private int a = 10;
public void a() {
System.out.println("a=" + a);
}
}
public class BClass extends AClass{
private int b = 20;
public void b() {
System.out.println("b=" + b);
}
}
public class CClass extends BClass{
public void checkValues() {
a();
b();
}
}
下面是在其更高的超类a中更改字段a值的代码
StackFrame currentFrame = mEvent.thread().frame(0);
ObjectReference objectReference = currentFrame.thisObject();
List<Field> fields = objectReference.referenceType().allFields();
System.out.println(fields);
objectReference.setValue(fields.get(1), vm.mirrorOf(30));
谢谢,但是我正在尝试访问另一个进程的变量,PropertyUtil会这样做吗?
public class AClass {
private int a = 10;
public void a() {
System.out.println("a=" + a);
}
}
public class BClass extends AClass{
private int b = 20;
public void b() {
System.out.println("b=" + b);
}
}
public class CClass extends BClass{
public void checkValues() {
a();
b();
}
}
StackFrame currentFrame = mEvent.thread().frame(0);
ObjectReference objectReference = currentFrame.thisObject();
List<Field> fields = objectReference.referenceType().allFields();
System.out.println(fields);
objectReference.setValue(fields.get(1), vm.mirrorOf(30));
a=30
b=20