Можете ли вы получить предыдущее значение переменной в Java? - PullRequest
6 голосов
/ 04 марта 2009

Скажем, у переменной есть переменная (скажем, String Str), и значение Str начинается как "", затем, когда какой-то код выполняется, он устанавливается на "тестирование", а затем где-то еще в коде он снова изменяется, чтобы сказать " тестер». Теперь в программе я хочу узнать, каким было предыдущее значение Str. Возможно ли это на Java?

Итак, я говорю, что переменная менялась дважды, и вы хотите узнать, какой была Str, до того, как она была изменена во второй раз. Таким образом, в приведенном выше примере последним значением Str было бы «тестер», но я хотел выяснить, что Str был до этого (предполагая, что вы не знали, что это было до того, как он был изменен на тестер), в этом случае я бы хотел быть удалось выяснить, что Str был "тест".

Можно ли вообще сделать это на Java?

Ответы [ 14 ]

0 голосов
/ 19 июля 2012

Вы слышали о Джайве? Это позволяет шаг назад при отладке, так что это частично ответ на ваш вопрос. Читайте здесь: http://www.cse.buffalo.edu/jive/

0 голосов
/ 19 мая 2010

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

Gooogle Bil Lewis Historical Debugger для одного примера. Обратите внимание, что большая часть этого программного обеспечения находится в фазе «начальной беты».

0 голосов
/ 04 марта 2009

Я не знаю причин, по которым хочу это сделать, но я предполагаю, что это какая-то отладка.

Если вы используете eclipse, вы можете установить точки останова, которые срабатывают при изменении переменной. Это могло бы достичь того, к чему, я полагаю, вы пытаетесь добраться.

0 голосов
/ 04 марта 2009

Если бы вы могли найти предыдущее состояние программы, никогда не было бы мусора для сбора, и программа очень быстро исчерпала бы память.

Для конкретных переменных вы можете использовать, скажем, стек LIFO. Вместо назначения вы бы добавили в стек. Вместо чтения переменной вы бы заглянули. Содержимое стека можно исследовать, чтобы найти исторические значения.

Другой подход заключается в использовании контрольно-измерительных приборов . Это позволяет вам с достаточным умением и терпением переписать байт-код, чтобы сделать то, что вы когда-либо захотите.

Возможно, вы хотите немного отойти и посмотреть, чего вы на самом деле пытаетесь достичь.

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