gpt4 book ai didi

java - JDI - 继承字段上的 ObjectReference.setValue()

转载 作者:行者123 更新时间:2023-12-02 05:44:15 26 4
gpt4 key购买 nike

我正在使用 JDI 来调试程序。我正在尝试更改某个对象引用中字段的值。我有 Field 对象,因为我可以通过

找到它
ObjectReference.referencetype().allFields()

但是,我无法使用

修改该字段
ObjectReference.setValue(Field paramField, Value paramValue)

因为它仅适用于此类或其直接父类(super class)内的字段 - 不包括层次结构中的更高类。

是否可以更改高于直接父类(super class)的类中字段的值?如果是这样,我将不胜感激任何帮助!

谢谢,

院长

编辑:我在调用 ObjectReference.setValue() 的行抛出以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.sun.tools.jdi.MirrorImpl.validateMirror(MirrorImpl.java:49)
at com.sun.tools.jdi.ObjectReferenceImpl.setValue(ObjectReferenceImpl.java:214)

最佳答案

ObjectReference.setValue(Field paramField, Value paramValue)

适用于所有字段,无论字段位于层次结构中的哪个位置。

示例:

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();
}
}

这是更改其更高父类(super class) 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));

以下是确认值更改的输出:

a=30
b=20

关于java - JDI - 继承字段上的 ObjectReference.setValue(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24236361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com