классная отладка объекта - PullRequest
       27

классная отладка объекта

1 голос
/ 09 октября 2009

Я только что подумал, что мне интересно, возможно ли это в Java. Допустим, при отладке с использованием eclipse или netbeans вы можете записать объект и сохранить его. Затем при прохождении второго раунда отладки сохраните объект еще раз. Теперь вы можете сравнить первый записанный объект со вторым объектом по всем свойствам и выяснить любые различия. Возможно ли это?

Ответы [ 3 ]

5 голосов
/ 09 октября 2009

Вы можете сделать это в простом Java-коде (при условии, что ваши объекты Serializable), но я не думаю, что какой-либо отладчик имеет встроенную функцию.

Это был бы просто случай сериализации первого объекта во время прогона отладки (который, если у вас был статический метод для этого, вы могли бы вообще вызывать из отладчика) и его сохранение где-нибудь. Затем, во время второго запуска, вызовите другой метод для восстановления объекта из его сериализованной формы - и затем сравните объекты (либо с их equals() методами, либо с каким-либо другим специальным методом сравнения).

На практике, однако, я обнаруживаю, что всякий раз, когда я хочу это сделать, я просто набрасываю соответствующие свойства на листе бумаги и сравниваю их вручную. Редко я смотрю на тысячи и тысячи свойств, которые могут меняться между пробегами; если вы думаете о симптомах, которые вы видите, и о поведении вашего объекта, у вас обычно может быть очень хорошее представление о том, что может измениться, прежде чем вы даже запустите отладчик, а затем воспользуетесь последним, чтобы подтвердить свою гипотезу и вернуться к посмотрите, где значение «пошло не так».

1 голос
/ 09 октября 2009

Я не думаю, что какой-либо отладчик может сохранить объект, чтобы сравнить его позже. Однако вы можете создать переменную watch для переменной, но обернуть ее с помощью ToStringBuilder () общих чисел apache и вывести ее в консоль, например:

System.out.println(ToStringBuilder.reflectionToString(object));

Каждый раз, когда достигается точка останова, содержимое объекта будет отображаться в консоли. Вы даже можете увидеть личные данные.

Следовательно, вам не нужно изменять метод toString () объекта напрямую (например, это полезно для библиотечного объекта). Затем вы можете сравнить результаты двух ваших проходов.

1 голос
/ 09 октября 2009

Дайте вашему объекту полезный метод toString(), а затем используйте модульные тесты, чтобы сравнить результат с ожидаемым.

Но я согласен: проводной протокол для удаленной отладки может сериализовать любой объект, поэтому должна быть возможность написать программу, которая делает это автоматически.

OTOH, объекты, которые не предназначены для сериализации, могут быть опасными. Если вы случайно используете это в загрузчике классов, вы получите все объекты и классы и все обратно как один большой кусок. Поэтому вам нужен способ остановить сериализацию, чтобы убедиться, что она не может вызвать хаос в глубоком дереве объектов.

Кроме того, я хотел бы, чтобы функция сохраняла текущее состояние приложения и могла вернуться в прошлое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...