«1. Введение

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

В этом руководстве мы рассмотрим удаленную отладку с помощью JetBrains IntelliJ IDEA. Давайте сначала подготовим наше тестовое приложение, изменив JVM.

2. Настройка JVM

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

Кроме того, IntelliJ IDEA предоставляет параметры JVM как часть конфигурации:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

2.1. Параметры JVM

Помимо конфигурации Java Debug Wire Protocol (JDWP) — jdwp=transport=dt_socket — мы видим параметры сервера, приостановки и адреса.

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

Итак, создадим приложение-планировщик:

mvn clean package

А теперь запустим приложение, включая параметр -agentlib:jdwp:

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 \
  target/gs-scheduling-tasks-0.1.0.jar

Откройте любой терминал и запустите команду. Запустив наше приложение, давайте теперь переключимся на IntelliJ.

3. Запуск конфигурации в IntelliJ IDEA

Далее в IntelliJ мы создаем новую конфигурацию запуска для удаленной отладки:

Теперь, когда наше приложение запущено, давайте начнем сеанс удаленной отладки, нажав кнопку «Отладка».

4. Удаленная отладка

Затем мы открываем файл ScheduleTask и ставим точку останова в строке 36, показанной здесь:

public void reportCurrentTime() {
  log.info("The time is now {}", dateFormat.format(new Date()));
}

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

При проблемах с запуском приложения мы меняем флаг приостановки на n и ставим точку останова в основном методе Application.

4.1. Ограничения

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

Также помните, что, хотя удаленная отладка является очень мощным инструментом, производственная среда не является подходящей целью для отладки.

5. Заключение

Как мы уже говорили в этой статье, удаленную отладку с помощью IntelliJ легко настроить и использовать, выполнив несколько коротких шагов.

Мы рассмотрели, как настроить JVM нашего приложения для отладки, а также некоторые ограничения этого важного инструмента в нашем наборе инструментов разработчика.

Пример приложения можно найти на GitHub.