Удаленная отладка Java (JPDA) не работает для меня в Tomcat 9

Я пытаюсь удаленно отладить веб-приложение Tomcat на недавно обновленном Tomcat 9.0.13 и Open JDK 11.0.1. Сервер - это Redhat Enterprise Linux 7.6, и я использую Eclipse в окне разработчика Windows 7 для подключения.

Tomcat запускается, и приложение доступно через порт 8080, но при определенных запросах происходит сбой. Итак, на своем Eclipse я настроил удаленное приложение Java со своими данными конфигурации. Когда я пытаюсь подключиться к нему, происходит сбой подключения с

Failed to connect to remote VM. Connection refused.

Я использую порт по умолчанию, 8000, и на сервере Linux netstat -an показывает, что процесс прослушивает этот порт при запуске Tomcat, а не при остановке Tomcat.

Я пробовал telnet из коробки Windows на порт 8000 и получаю

$ telnet c516vefpubrec 8000
Trying XX.XXX.XX.XX...
telnet: Unable to connect to remote host: Connection refused

Когда я делаю то же самое с нашим старым Tomcat 7 + Java 1.8, все проходит успешно. Я пробовал другие порты с тем же результатом.

Может ли это быть ошибкой? Есть ли элемент конфигурации для включения JPDA на Tomcat 9?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
6 111
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

У меня была точно такая же проблема. Я запускаю приложение из Centos vm и пытаюсь выполнить отладку с моей машины с Windows.

Мне пришлось зайти в файл catalina.sh на виртуальной машине и внести изменения. В разделе, в котором говорится, что обрабатывает флаг jpda, переменную JPA_OPTS необходимо изменить на JPDA_OPTS = "-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=*:$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND".

Обратите внимание на *: перед переменной JPDA. Это позволяет любому IP-адресу иметь доступ к удаленной отладке. Я считаю, что по умолчанию он разрешает только локальный хост.

Надеюсь это поможет.

Спасибо за ваш ответ @Paul Tucker. Я сменил работу и не имею возможности протестировать ваше решение, но оно имеет смысл, поэтому я его принял.

TikiTavi 22.04.2019 15:17

Я полагаю, что синтаксис * начался с Tomcat9? Если вы застряли на удаленной отладке чего-то более старого (надеюсь, это часть усилий по миграции), попробуйте address=0.0.0.0:$YourListingJdwpPort.

CodeShane 19.10.2021 19:26

У меня была аналогичная проблема с запуском Tomcat 9 в докере. Я указал JPDA_ADDRESS в сборке докера, чтобы разрешить доступ с любого хоста:

ОКРУГ JPDA_ADDRESS=8000 CMD ["catalina.sh", "jpda", "выполнить"]

Если вы работаете в Windows и используете Tomcat как 64-разрядную службу. Тогда нужно было бы внести изменения в реестр Windows. Этот путь реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Apache Software Foundation\Procrun 2.0\<Tomcat9ServiceName>\Parameters\Java

В 32-битной Windows этот путь будет без WOW6432Node. Есть строковое значение Options и удаленную отладку можно включить, добавив туда эти 2 строчки

-Xdebug
-Xrunjdwp:transport=dt_socket,address=*:4446,server=y,suspend=n

если вы не поставите параметр *: to address, то удаленная отладка будет возможна только с локального хоста. *: означает, что вы можете подключиться из любого места/любого хоста к коту для отладки.

Tomcat9ServiceName — это имя службы Tomcat, которое показано на снимке экрана ниже, и обычно вы вводите его во время установки.

Другие вопросы по теме