Поиск значения ссылки на объект с помощью HashCode JDI - PullRequest
0 голосов
/ 05 января 2020

Я пишу свой собственный Java отладчик с использованием JDI. С помощью приведенного ниже кода для примитивных типов вывод печатается нормально. Однако для любых типов объектов я не получаю фактическое значение, а что-то вроде экземпляра State [4] (id = 182) и java .lang.String [0]. Мне удалось выяснить, как напечатать все, что является подынтерфейсом Value (так что строка может печататься правильно с этим первым блоком кода). Это также верно для массивов, так как они находятся в подинтерфейсе. Однако как насчет пользовательских типов в коде пользователя? Есть ли простой способ распечатать их? (Например, если у пользователя есть такой объект, как State или Computer или любой другой.) выделенный текст Наконец, есть ли способ напечатать эти типы через их код ha sh (например, id = 182)? Я начинаю думать, что поиск всех значений в каждом объекте займет некоторое время (что мое приложение не может себе позволить). Если есть лучший или более быстрый способ сделать это, я хотел бы услышать об этом.

Опять же, моя цель - быстро найти все значения пользовательских объектов.

if(val instanceof ArrayReference) {
    List<Value> what = ((ArrayReference) val).getValues();
    System.out.println(what);
}
                        StackFrame stackFrame = ((BreakpointEvent) event).thread().frame(0);
                        ObjectReference objRef = stackFrame.thisObject();                       

                        ThreadReference thread = stackFrame.thread();
                        Map<LocalVariable, Value> visibleVariables = (Map<LocalVariable, Value>) stackFrame.getValues(stackFrame.visibleVariables());

                        for (Map.Entry<LocalVariable, Value> entry : visibleVariables.entrySet()) {
                            System.out.println("next variable: ");
                            String name = entry.getKey().name();
                            Value value = entry.getValue();
                         }
...