2009-06-10 2 views
188

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

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

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

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

+0

какая ошибка вы получаете? – Glen

+0

https://stackoverflow.com/a/46171836/1619407 –

ответ

387

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

[Официальная документация по подключению и вызову JDPA] (http://docs.oracle.com/javase/8/docs/technotes/guides/jpda/conninv.html# Invocation) –

+2

@ DJGummikuh Ницца! Я обновил сообщение, чтобы использовать опцию '-agentlib' более нового стиля для вашего удовольствия от резки и вставки. :-) –

+0

Всегда ли нужно, чтобы исходный код удаленного приложения присутствовал в машине, где мы выполняем удаленную отладку? – testerjoe2

26

Шаги:

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

Для получения более подробной информации см. Step by Step guide on Java remote debugging.

65

Для 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 interface documentation:

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

+0

Следующие действия с настройками по умолчанию Eclipse: -agentlib: jdwp = transport = dt_socket, server = y, address = 8000 – Sundae

0

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

Настройки Eclipse:

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

  • Имя: GatewayPortalProject
  • Проект: GatewayPortal-портлет
  • Тип соединения: Socket Attach
  • Свойства подключения: я) локальный б) 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:

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

-3

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

См. Remotely debug a java web application ссылка. Полный поток удаленной отладки описан здесь. Надеюсь, это поможет.

+1

Серьезно? Чтобы проанализировать один поток запросов, я включу ведение журнала для всего запроса, разверну его и прохожу через ГБ журнала? –

+0

Я предоставил вам альтернативный способ отладки Spring MVC-приложения, и да, ведение журнала - лучший способ отладки удаленного приложения. Если у вас есть лучший вариант, любезно сообщите мне, чтобы мы могли использовать его в будущем ... –

 Смежные вопросы

  • Нет связанных вопросов^_^