Милан Бхардвадж – коллега и специалист по разработке программного обеспечения AI/ML с богатым опытом решения реальных задач с помощью масштабируемых решений. Он руководил многими циклами разработки от начала до завершения и написал это экспертное и хорошо продуманное руководство по удаленной отладке в средах IntelliJ .
Отладка – один из наиболее важных аспектов циклов разработки программного обеспечения. Разработчики используют его не только для поиска и исправления ошибок, но и для выявления потенциальных проблем с производительностью в коде. Умение отлаживать – это основной навык, которым должен обладать каждый разработчик, чтобы предоставлять ценные масштабируемые решения.
Для приложений, запущенных на удаленных серверах и компьютерах, разработчики обращаются к удаленной отладке, чтобы выявить проблемы, которые невозможно создать локально. Например, вы можете запустить меньший экземпляр вашей базы данных локально для тестирования, но при загрузке в рабочую среду могут возникнуть ошибки, связанные с большими наборами данных . Или вы можете не использовать те же разрешения и ограничения брандмауэра при локальной разработке, что и в рабочей среде. Это может привести к ошибкам, которые невозможно воспроизвести локально без значительных инвестиций в инструментарий.
С помощью удаленной отладки вы можете удаленно управлять целевым объектом, используя экземпляр отладчика, запущенный на другом компьютере. Экземпляр отладчика, также называемый механизмом отладки, выполняется на том же компьютере, что и отлаживаемая процедура. На вашем локальном компьютере запускается пользовательский интерфейс отладчика, в то время как удаленная система запускает как механизм отладки, так и целевую процедуру.
Удаленная отладка особенно полезна по нескольким причинам:
- Управление потоком выполнения: Очень важно, чтобы разработчики понимали контекст ошибки по мере ее проявления, и удаленная отладка позволяет это с помощью таких функций, как приостановка, возобновление и пошаговое выполнение программы.
- Отладка в производственных средах: Устранение неполадок на удаленных тестовых и производственных серверах – непростая задача. Запуск отладчика непосредственно на сервере, на котором запущено приложение, имеет свой собственный набор ограничений. Производственные серверы обычно работают в строгих средах, где отсутствуют удобные инструменты разработчика. Удаленная отладка – это идеальное решение.
- Поддержка нескольких сценариев развертывания: Разработчики могут отлаживать различные сложные сценарии развертывания, от одного автономного приложения до распределенных приложений и кластеров.
Удаленная отладка на практике
Большинство языков программирования поддерживают некоторую удаленную отладку с использованием соответствующих инструментов. Java включает в себя несколько вариантов удаленной отладки, включая интеграцию с большинством IDE.
В этом руководстве вы увидите, как настроить удаленную отладку вкл IntelliJ таким образом, вы можете эффективно отлаживать приложения, развернутые на промежуточных и производственных машинах, когда это необходимо.
Настройка удаленной отладки в IntelliJ
JetBrains IntelliJ – одна из самых интеллектуальных интегрированных сред разработки (IDE), используемая более чем 62 процент разработчиков Java . Он предлагает разработчикам готовые функции отладки Java, которые облегчают эффективные и устойчивые решения.
Создание нового проекта и класса
Первым шагом является правильная настройка и настройка вашего Java project в IntelliJ. Если вы раньше не настраивали Java-программу, прочитайте документацию IntelliJ , чтобы понять, как вы можете создать и настроить новый Java-проект.
Чтобы продемонстрировать удаленную отладку, создайте новый класс. Нажмите src на боковой панели наведите курсор на/| Создать , затем нажмите Класс Java . Для этого примера мы создадим класс с именем My_Numbers .
После того, как вы создали класс Java, пришло время написать некоторый код. Заполните метод Main приведенным ниже примером:
public class My_Numbers { public static void main(String[] args) { System.out.println("Initiating"); for (int num = 0; num < 100; num++) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(num); } System.out.println("Done"); } }
Этот код является базовым примером, который выводит числа от 0 до 100. Хотя это простой пример, его будет достаточно, чтобы продемонстрировать удаленную отладку, не добавляя слишком много сложностей. Вы добавите [( https://www.jetbrains.com/help/idea/using-breakpoints.html )debug точка останова] на последующих этапах.
Настройка Удаленной Отладки
Теперь, когда у вас есть готовый проект Java и тестовый класс, вам нужно настроить конфигурацию отладки в IntelliJ. Перейдите к Запустите , затем Отредактируйте конфигурации . Нажмите Добавить новую конфигурацию (+) и выберите Удаленная отладка JVM .
Заполните следующую информацию, чтобы описать вашу среду удаленной отладки:
- Имя: В данном случае
My_Numbers_remote_debug |/.
Хост: Это поле предназначено для адреса компьютера, на котором будет запущено приложение хоста. Поскольку в этом примере мы работаем на одном сервере, он должен быть - localhost
, но если вы хотите отладить удаленный сервер (например,
192.168.18.46), вы должны ввести здесь IP-адрес.
Порт: - 5005
в данном случае. Этот порт должен быть доступен, поэтому выберите тот, который поддерживает ваш сервер.
Аргументы командной строки: Вы можете скопировать сгенерированные аргументы командной строки и вставить их в командную строку, где активна JVM. Вы можете скопировать строку прямо сейчас (например, – - agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005)
и сохраните его для последующего использования.
Теперь IntelliJ знает, где получить доступ к вашему удаленному (или локальному) приложению для отладки, но вам все равно нужно упаковать и запустить Java-приложение, чтобы войти в сеанс отладки.
Запуск приложения
Настройте хост-приложение, упаковав ваше приложение в JAR и используя ранее сгенерированную строку аргументов непосредственно в командной строке.
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 remote-debug-application-sample.jar
Далее нажмите кнопку Запустите , затем Отредактируйте конфигурацию , затем выберите My_Numbers
из Application .
В Изменить параметры выберите Добавить параметры виртуальной машины .
В поле Параметры виртуальной машины вставьте строку аргумента, которую вы скопировали ранее.
После выполнения необходимых настроек вы готовы к запуску приложения. Щелкните правой кнопкой мыши в текстовом редакторе и выберите Запустите My_Numbers.main()
.
В выводе программы вы увидите Прослушивание транспортного dt_socket по адресу: 5005
, за которым следует вывод вашего приложения. В первой строке указывается, что агент отладки активен и программа готова принимать входящие подключения отладчика.
Добавление точки останова
Теперь, когда ваша Java-программа запущена, вы можете добавить точку останова и присоединить ее к процессу. Точки останова позволяют вам установить место в коде, где выполнение будет приостановлено, чтобы вы могли проверить память, переменные и состояние вашей программы.
Вы можете установить точку останова линии, нажав на желоб на выбранной вами линии. В этом примере щелкните строку 10 и установите точку останова с условием num
. Программа приостанавливается, как только условие точки останова удовлетворяет условию.
На этом этапе вы можете выполнить соответствующие действия по отладке, включая вычисление выражений и пошаговое выполнение, среди других задач. Эти действия будут работать независимо от того, работаете ли вы локально на своем компьютере или подключаетесь к удаленному экземпляру вашего Java-приложения.
Нельзя отрицать, что с распределенными приложениями стало проще управлять, масштабировать и распределять рабочую нагрузку. Однако архитектура значительно затрудняет обнаружение/воспроизведение ошибок, поскольку сложно отследить аномалии до источника или воспроизвести сложные производственные среды. Удаленная отладка с помощью IntelliJ может помочь разработчикам выявлять ошибки и воспроизводить ошибки на каждом этапе жизненного цикла развертывания программного обеспечения.
Оригинал: “https://dev.to/eyalk100/how-to-debug-remotely-in-intellij-11o8”