В отладчике Eclipse какие изменения можно «заменить горячим кодом» в работающей JVM? - PullRequest
8 голосов
/ 05 августа 2011

В Eclipse, если вы запускаете программу в «Отладке», вы можете вносить изменения в код, и в большинстве случаев он вступает в силу немедленно.

Иногда, однако, он не будет - в этом случае он выскакивает сообщение или говорит "(может быть не синхронизирован)" рядом с потоками на панели отладки.

Что определяет тип изменений, которые могут быть заменены в «горячем» режиме? Я заметил, что эти изменения обычно терпят неудачу:

  • введение новых анонимных внутренних классов
  • изменение классов (переименование / добавление / удаление полей и методов) при создании экземпляра класса
  • добавление блока try-catch

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

1 Ответ

9 голосов
/ 05 августа 2011

Метод заявления (процедурный код) работает.Все, что связано с добавлением, удалением или изменением схем классов, не работает.Поэтому никакие изменения наследования, полей, методов извлечения, изменения подписей и т. Д.

Обычно операторы метода горячей замены не работают, если вы одновременно делаете что-то запрещенное.Тогда соединение с горячей заменой, так сказать, «разорвано».

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

Редактировать: Ребята из zeroturnaround составили список в разделе своих функций, что отладчик jvm не может сделать из коробки для продвижения своего продукта: http://www.zeroturnaround.com/jrebel/features/.Нравится ли вам инструмент или нет, этот список отражает мой опыт.

...