Удаленная отладка приложения Java

У меня есть приложение java, работающее на Linux-машине. Я запускаю Java-приложение, используя следующее:

java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n

Я открыл порт 4000 для TCP на этой машине Linux. Я использую eclipse с компьютера Windows XP и пытаюсь подключиться к этому приложению. Я также открыл порт в окнах.

Обе машины находятся в локальной сети, но я не могу подключить отладчик к Java-приложению. Что я делаю неправильно?

Ответ 1

Изменить: Я заметил, что некоторые люди режут и вставляют вызов здесь. Ответ, который я изначально дал, был актуальным только для ОП. Здесь более современный стиль вызова (включая использование более обычного порта 8000):

java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>

Далее следует исходный ответ.


Попробуйте следующее:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

Два пункта:

  • В опции runjdwp нет пробелов.
  • Параметры появляются перед именем класса. Любые аргументы, которые вы получили после имени класса, являются аргументами вашей программы!

Ответ 2

Для JDK 1.3 или более ранних версий:

-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

Для JDK 1.4

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

Для нового JDK:

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

Измените номер порта в соответствии с вашими потребностями.

Из java technotes

Начиная с версии 5.0, опция -agentlib: jdwp используется для загрузки и указания параметры агента JDWP. Для выпусков до 5.0, -Xdebug и Используются опции -Xrunjdwp (реализация 5.0 также поддерживает опции -Xdebug и -Xrunjdwp, но более новая опция -agentlib: jdwp предпочтительнее, поскольку агент JDWP в 5.0 использует интерфейс JVM TI для VM, а не более старый интерфейс JVMDI)

Еще одно замечание: Документация по интерфейсу JVM Tool:

JVM TI был представлен в JDK 5.0. JVM TI заменяет интерфейс профилирования виртуальной машины Java (JVMPI) и интерфейс отладки виртуальной машины Java (JVMDI), который с JDK 6 больше не предоставляется.

Ответ 3

Шаги:

  • Запустите приложение удаленного Java с параметрами отладки, как указано выше.
  • Настройте Eclipse для удаленной отладки, указав хост и порт.
  • Запустите удаленную отладку в Eclipse и дождитесь завершения соединения.
  • Настройка точки останова и отладки.
  • Если вы хотите отлаживать с начала использования приложения suspend = y, это приведет к приостановке удаленного приложения до тех пор, пока вы не подключитесь к eclipse.

Подробнее см. "Пошаговое руководство по удаленной отладке Java" .

Ответ 4

Покрытие ответа Java> = 9:

Для Java 9+ опция JVM нуждается в небольшом изменении, добавив в префикс адреса IP-адрес компьютера, на котором установлена JVM, или просто *:

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

Это связано с изменением, отмеченным в https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435.

Для Java & lt; 9, номер порта достаточно для подключения.

Ответ 5

Вот как вы должны настроить Eclipse Debugger для удаленной отладки:

Настройки Eclipse:

1.Щелкните кнопку запуска
2.Выберите Конфигурации отладки
3.Выберите "Приложение удаленной Java"
4.Новая конфигурация

  • Имя: GatewayPortalProject
  • Проект: Портлет GatewayPortal
  • Тип подключения: Socket Attach
  • Свойства подключения: i) localhost ii) 8787

Для JBoss:

1. Измените /path/toJboss/jboss-eap-6.1/bin/standalone.conf в своем vm следующим образом:  Раскомментируйте следующую строку, удалив #:

JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

Для Tomcat:

В файле catalina.bat:

Шаг 1:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

Шаг 2:

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

Шаг 3: Запустите Tomcat из командной строки, как показано ниже:

catalina.sh jpda start

Затем вам нужно установить точки останова в классах Java, которые вы хотите отлаживать.

Ответ 6

Я хотел бы подчеркнуть, что порядок аргументов важен.

Для меня java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar команда открывает порт отладчика,

но команда java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 не.

Ответ 7

У меня вопрос. Как я могу отлаживать с самого начала. Когда я присоединяю клиента к серверу, я пропустил некоторые коды.

Ответ 8

Начиная с Java 9, разъем JDWP по умолчанию принимает только локальные соединения. Видеть: http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435

Итак, чтобы разрешить отладочные соединения извне, укажите *: as address:

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

Ответ 9

Наилучшим вариантом отладки является создание журналов и анализ журналов. Но в некоторых случаях нам нужно отлаживать веб-приложение, развернутое на сервере.

См. Удаленная отладка java-веб-приложения. Полный поток удаленной отладки описан здесь. Надеюсь, это поможет.