предупреждение о горячей замене без внесения изменений (Spring tool suite 3.9) - PullRequest
0 голосов
/ 05 марта 2020

При запуске моего кода в режиме отладки я получаю 2 сообщения об ошибках:

Could not delete [path_to]\productiondb.log. May be locked by another process

Я не знаю, какой процесс может его заблокировать. Это происходит, когда я делаю изменения в коде, когда мой Pivotal t c Server работает в режиме отладки, но это, похоже, создает много проблем. Однако иногда я получаю это предупреждение:

Hote Code Replace Failed

Также из-за некоторых изменений. Обычно я просто перезагружаю сервер и иду дальше. Это не настоящая проблема, настоящая проблема в том, что я получаю эти сообщения, когда я не внес никаких изменений. Иногда это происходит, когда я запускаю определенную часть кода, в других случаях, когда я открываю определенные коды в sts, он, кажется, не останавливается дважды в одном и том же месте.

Я подозреваю, что это как-то связано с git. Я использую git для переключения между версиями и выполнения тестов. Поэтому я думаю, что STS имеет некоторый код в памяти до того, как я сменил ветку на git, и не обновляет его, пока я не запустил или не открыл файл с этим кодом. Но я довольно новичок и в sts, и в git, и не могу быть уверен, что это сработает. Если да, кто-нибудь знает, как обновить sts после того, как я сменил ветку? Если это не так, кто-нибудь знает, что может быть причиной?

1 Ответ

0 голосов
/ 06 марта 2020

Если вы запускаете приложение в режиме отладки, Eclipse Debugger сообщает приложению об изменении кода и пытается использовать API отладки для замены нового кода в работающем приложении. Это особенно полезно, если вы отлаживаете код, достигаете точки останова, перебираете код, решаете проблему, изменяете код и нажимаете сохранить. В этот момент компилятор Eclipse обновляет файл класса и сообщает работающей JVM об обмене новым кодом. Если это удастся, отладчик вернется к последнему кадру стека, и выполнение вашего приложения продолжится с начала введенного вами метода. Это позволяет напрямую продолжать отладку и пошаговое выполнение обновленного кода без перезапуска приложения.

Хотя это отличная особенность JVM, она очень ограничена с точки зрения того, какие изменения в классах JVM может справиться с этой горячей заменой. Обычно это ограничивается реализацией методов. Поэтому добавление новых методов, добавление или удаление членов класса и т. Д. c не поддерживаются. В результате появится скриншот выше. Это означает, что JVM не смогла выполнить горячую замену измененного кода и будет продолжать работать с ранее загруженным кодом вместо измененного.

...