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


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

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

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

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

5 209

5 ответов:

Edit: я заметил, что некоторые люди вырезают и вставляют вызов здесь. Ответ, который я первоначально дал, имел отношение только к ОП. Вот более современный стиль вызова (в том числе с использованием более обычного порта 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

тут два момента:

  1. нет пробелов в .
  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

пожалуйста, измените номер порта в зависимости от ваших потребностей.

С Ява документации

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

еще одна вещь, чтобы отметить, от документация по интерфейсу инструмента JVM:

JVM TI был представлен в JDK 5.0. JVM TI заменяет Java Virtual Machine Profiler Interface (JVMPI) и Java Virtual Machine Debug Interface (JVMDI), которые, начиная с JDK 6, являются больше не предоставляется.

действия:

  1. запустите удаленное приложение java с параметрами отладки, как указано выше.
  2. настроить Eclipse для удаленной отладки, указав хост и порт.
  3. запустите удаленную отладку в Eclipse и дождитесь успешного подключения.
  4. настройки точки останова и отладка.
  5. Если вы хотите отлаживать от начала использования приложения suspend=y , это будет держать удаленное приложение приостановлено до подключения от затмение.

посмотреть Пошаговое Руководство по удаленной отладке Java для полной информации.

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

Настройки Eclipse:

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

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

Для JBoss:

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

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

Для Tomcat :

на Каталина.летучая мышь file:

Шаг 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, которые вы хотите отладить.

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

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