предисловие
Вчера увидел вопрос"Что бы вы больше всего хотели съесть после окончания пандемии?"
Подумай хорошенько, горячий горшок? БАРБЕКЮ?
Смотрела на весы, и боялась, что смогу записаться только в спортзал.
Как вы думаете, временная сложность ваших толстых 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+ очень «Несерьезносочетание, но развитиемаленькие инструментыЭто все еще довольно хорошо. Если вы столкнетесь с той же проблемой переноса данных, вы можете обратиться к решению автора 😄
Возьмите небольшой каштан 🌰 другие серии: