Вопрос

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

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

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

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

Это было полезно?

Решение

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

Начиная с 5.0. Опция -AgentLib: JDWP используется для загрузки и указания параметров агенту JDWP.Для выпусков до 5.0 используются параметры -xdebug и -xrunjdwp (реализация 5.0 также поддерживает параметры -xdebug и -xrunjdwp, но более новая опция jdwp: jdwp предпочтительнее, поскольку агент jdwp использует интерфейс jvm ti к VM, а не старый интерфейс JVMDI)

Еще одна вещь, на которую следует обратить внимание, из Документация по интерфейсу инструмента JVM:

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

Шаги:

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

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

Ответ, касающийся 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 <9 номера порта достаточно для подключения.

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

Настройки затмения:

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

  • Имя :ШлюзПорталПроект
  • Проект :Портлет GatewayPortal
  • Тип соединения:Розетка Прикрепить
  • Свойства соединения:i) локальный хост 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"

Для Томката:

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

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

Для меня 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 команда не делает.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top