Какие изменения кода автоматически отражаются в Eclipse в режиме отладки? - PullRequest
5 голосов
/ 01 декабря 2010

Я использую Eclipse (для записи, отладки) в качестве IDE. В режиме отладки, когда я делаю некоторые изменения, такие как инициализация локальной переменной, они отражаются автоматически.

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

Теперь вопрос в том, какие изменения отражаются автоматически, а какие нет.

Я использую удаленную отладку, но будет ли какая-нибудь разница при запуске программы из eclipse?

Ответы [ 5 ]

3 голосов
/ 01 декабря 2010

Вы видите Hotswap в действии. Он ограничен только изменением тела метода. Подробнее здесь .

2 голосов
/ 01 декабря 2010

Это не функция IDE, а функция виртуальной машины удаленной отладки. VM теперь может обрабатывать простые изменения в логике внутри методов инициализаторов переменных, но не может обрабатывать измененную структуру класса.

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

Здесь вы можете найти некоторые объяснения.

0 голосов
/ 20 февраля 2012

HotSwap очень ограничен, он может перезагружать только простые изменения тела метода.

Взгляните на JRebel , он также может перезагрузить другие изменения кода (например, добавление / удаление полей / методов / аннотаций / значений перечислений и т. Д.). См. Подробный список функций .

(Обратите внимание, что JRebel является коммерческим продуктом с бесплатными лицензиями, доступными для разработчиков OSS и Scala.)

0 голосов
/ 01 декабря 2010

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

Это все, что я могу дать по вашему вопросу.

0 голосов
/ 01 декабря 2010

В удаленной отладке горячая замена кода вообще невозможна, поскольку eclipse не может поменять файлы классов внутри другой JVM.

Удаленный отладчик подключается к другой виртуальной машине и отслеживает код, который выполняется внутри этой удаленной машины. Просто исходные файлы локальные.

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