Удаленная отладка приложения 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-веб-приложения. Полный поток удаленной отладки описан здесь. Надеюсь, это поможет.