Удаленная отладка Java-приложения Bluemix CF buildpack

У меня есть автономное Java-приложение, развернутое в IBM Bluemix в виде пакета сборки Cloud Foundry Java.

Есть ли способ выполнить удаленную отладку в Eclipse? Я смог найти только документы для удаленной отладки приложений Java Liberty buildpack.


person Caroh    schedule 29.06.2017    source источник


Ответы (2)


Способ прослушивания сокетов, упомянутый в другом ответе, безусловно, удобен, но предполагает, что вашей машине отладки будет назначен общедоступный IP-адрес (или вам нужно настроить переадресацию портов на вашем маршрутизаторе). Это не всегда возможно.

Таким образом, другой способ сделать это — включить отладку в вашем приложении Java и использовать переадресацию портов ssh для подключения к экземпляру приложения. Ниже приведены шаги

  1. Включите отладку Java, задав для переменной среды JBP_CONFIG_DEBUG значение {enabled: true} и перезапустив приложение.
  2. Настройте туннель SSH для среды отладки через JDWP.

    cf ssh -N -T -L 8000:localhost:8000 <APP_NAME>

  3. После открытия туннеля ssh вы используете тип отладки Socket Attach из eclipse на localhost:8000

Предпосылки до cf ssh: cf api, cf login, cf target

person Shiva    schedule 30.06.2017
comment
Следовали инструкциям с дополнительной помощью discuss.pivotal.io/hc/en-us/articles/, но на шаге 2 этого поста произошел сбой с ошибкой EOF. - person Caroh; 02.07.2017
comment
пожалуйста, попробуйте использовать сборочный пакет облачного литейного производства. github.com/cloudfoundry/java-buildpack - person Shiva; 05.07.2017
comment
@opiethehokie Пожалуйста, попробуйте установить эту переменную среды JBP_CONFIG_DEBUG "{ enabled: true, port: 8000, suspend: false }" и попробуйте проверить с помощью ssh, открыт порт 8000 или нет. - person Shiva; 10.07.2017

В документации по пакету сборки Java есть некоторые инструкции по адресу https://docs.cloudfoundry.org/buildpacks/java/java-tips.html#debugging

  1. Откройте свой проект в Eclipse.
  2. Щелкните правой кнопкой мыши свой проект, перейдите в раздел «Отладка как» и выберите «Конфигурации отладки».
  3. Создайте новое удаленное приложение Java.
  4. Убедитесь, что выбран ваш проект, выберите Standard (Socket Listen) в раскрывающемся списке Connection Type и установите порт. Убедитесь, что этот порт открыт, если вы используете брандмауэр.
  5. Щелкните Отладка.

Теперь отладчик должен быть запущен. Если вы переключитесь на перспективу «Отладка», вы должны увидеть свое приложение в списке на панели «Отладка» с надписью Waiting for vm to connect at port.

Затем отправьте свое приложение в Cloud Foundry и попросите Cloud Foundry подключиться к отладчику, работающему на вашем локальном компьютере, с помощью следующих инструкций:

  1. Отредактируйте файл manifest.yml. Установите количество экземпляров равным 1. Если вы установите это значение больше единицы, несколько приложений попытаются подключиться к вашему отладчику.
  2. Также в manifest.yml добавьте раздел env и создайте переменную с именем JAVA_OPTS.
  3. Добавьте конфигурацию удаленного отладчика в переменную JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,address=YOUR-IP-ADDRESS:YOUR-PORT.
  4. Сохраните файл manifest.yml.
  5. Запустить cf push.

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

person opiethehokie    schedule 29.06.2017
comment
Не удается подключиться. 'ошибка транспорта 202: сбой подключения: соединение отклонено JDWP Transport dt_socket не удалось инициализировать, ошибка выхода TRANSPORT_INIT (510) AGENT_ERROR_TRANSPORT_INIT (197): транспорты не инициализированы [debugInit.c: 750]' - person Caroh; 02.07.2017