Дайте маленький каштан 🌰 IDEA удаленная отладка и сценарии использования

Java
Городское строительство (Подумай, прежде чем кодировать.jpg)

предисловие

Вчера увидел вопрос"Что бы вы больше всего хотели съесть после окончания пандемии?"

Подумай хорошенько, горячий горшок? БАРБЕКЮ?

Смотрела на весы, и боялась, что смогу записаться только в спортзал.

Как вы думаете, временная сложность ваших толстых N фунтов равна O (2 ^ N), На самом деле это O(1), фух.

текст

Вернуться к теме

Что касается функции удаленной отладки, то в основном большинство IDE идут с ней, но в целом она редко используется, наверное, потому что...

Просто шутка 😄, не принимайте всерьез

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

Откуда взялась яма

Яма исходит от моего гаджета с открытым исходным кодом,V-Mock.

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

Для вышеуказанной цели я использовал встроенную базу данныхsqlite, для сотрудничества со Springboot, сконструировать небольшой jar-пакет, не требующий настройки и стартующий в одну строчку.Структура каталогов следующая, а БД кидается напрямую в Ресурс:

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

Обновление версии одноклассники, обнаружив, что данные пропали, автор временно дал план,Что касается встроенной базы данных, просто перезапишите файл БД в старой банке в новую банку

(Файл db расположен в банке)

Когда я говорю это, я не могу полностью полагаться на Watt, ведь прекрасное сочетание Springboot+Sqlite также является продуктом случайных попыток компактности инструмента.

На самом деле, подумайте об этом немного, файл db отличается от других ресурсов и нуждается в частой перезаписи.Конечно, это не исходный файл в пакете jar, который изменяется.

пока не получишь одинIssues, сообщил автору, что копирование файла БД в новый jar не дало результата.

Так же быстро среагировал автор, как можно использовать файл БД в банке, реальный файл неожиданно не помещается под java.io.tmpdir.

Путь java.io.tmpdir, при нормальных обстоятельствах, macos находится в$TMPDIR, победа в%temp%.

Автор также переключился на соответствующий каталог и, наконец, увидел файл БД, фактически используемый при работе jar:

Но этот способ именования очень странный и не имеет ничего общего с исходным v-mock.sqlite.

Я полностью проследил за исходным кодом драйвера sqlite jdbc и нашел егоorg.sqlite.SQLiteConnectionизextractResourceметод, см. именованный код:

На самом деле ясно видно, что исходный код используетsqlite-jdbc-tmpХэш-код класса URL файла БД в исходном банке объединяется как имя файла.

почему авторЯ не заметил этого при разработке, посмотрите на этот методсначала, еслиСудите, чтобы знать.

Автор привык использовать режим Springboot или Application в IDE для прямого запуска проекта, а не пакетный метод запуска.

так когдаProtocolдаfileвместоjar, используйте его напрямуюtarget/classes/db/v-mock.sqliteфайл без создания временного файла.

При разработке визуализатор БД также подключается кtarget/classes/db/v-mock.sqlite, так что никаких сомнений на тот момент не нашлось.

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

Затем я хочу поразить точку останова впосле первого, если, увидеть эффект,Выбери одиндоступенУдаленная отладкаПуть.

Удаленная отладка IDEA

Модуль удаленного отладки IDEA действительно очень вдумчивый в дизайне. Он может управляться дураками, а все команды сочетаются. Я не знаю, если текущая версия Eclipse так продумана.

Поиск в конфигурацииremoteШаблон, нажмите в правом верхнем углуcreate configuration, создаетУдаленная отладкаметод запуска.

Debugger modeвыберитеAttach to remote JVMВот и все, у него также есть возможностьListen to remote JVM, как следует из названия, один из них активно подключен к запускаемой программе, а другой является пассивным слушателем.

айпи и портИзлишне говорить, что автор напрямую использовал локальный пакет jar, поэтому заполнилlocalhost, если вы используете другие версии версии jdk справа, вам нужно настроить ее.

Текстовое поле посередине — это сгенерированный параметр jvm, который очень удобен для пользователя, просто добавьте команду запуска напрямую.
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 v-mock.jar

Смысл команды можно вообще проигнорировать, если хотите знать, то автор пояснит примерно:

  • -agentlib:jdwpСамый важный параметр — запуск агента JDWP, полное название JDWP — Java Debug Wire Protocol, официальный инструмент для удобной отладки.

  • transport=dt_socketДанные передаются через сокет, а dt — это аббревиатура передачи данных.

  • server=yВключите сервер отладки, обратите внимание, что, поскольку автор выбрал Присоединиться к удаленной JVM выше, так что вотy, дождитесь присоединения отладчика, если выбрать режим Listen, то все наоборот, отладчик это сервер, вотn.

  • suspend=nПовесить ли, здесь установленоn, то есть программа работает нормально. Когда вам нужно Прикрепить, вы можете перейти к Присоединению. Если он установлен вy, программа будет ожидать продолжения выполнения отладчика Attach, например запуска сцены отладки исходного кода.

  • address=5005Порт отладки установлен на 5005, конечно, доступны и другие порты.

Запустите пакет jar, а затем выполните отладку только что созданным способом, ожидаемая позиция точки останова успешно достигнута.

конец

Выяснив причину, автор также разработал метод переноса данных, следуя методу именования в исходном коде sqliteJDBC.

То есть: автоматически или вручную найти файл базы данных предыдущей версии, сделать копию и назвать его по хэш-коду новой версии.

Встроенная база данных Springboot+ очень «Несерьезносочетание, но развитиемаленькие инструментыЭто все еще довольно хорошо. Если вы столкнетесь с той же проблемой переноса данных, вы можете обратиться к решению автора 😄


Возьмите небольшой каштан 🌰 другие серии: