Какие параметры командной строки Java следует установить, чтобы разрешить удаленную отладку JVM?

Я знаю, что есть JAVA_OPTS, который можно настроить для удаленной отладки Java-программы.

Что они собой представляют и что означают?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
329
0
421 956
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

У меня есть закладка эта статья при настройке для Java 5 и ниже.

В основном запустить это с:

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

Для Java 5 и выше запустите его с помощью:

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

Стоит упомянуть, что вы можете настроить свой адрес, например *:1044, чтобы включить удаленную отладку с любого компьютера.

Herr Derb 24.08.2018 14:58

HerrDerb прав .. Начиная с Java 9 «адрес = 1044» не всегда прослушивает все интерфейсы. "address = *: 1044" заставляет Java 9+ вести себя как Java 8 ...

alfonx 05.09.2018 16:47

Просто примечание: это не требуется для добавления параметра address. Если не указан, агент выбирает случайный номер порта. Это может быть полезно, если вы запускаете несколько узлов в одной командной строке java.

asbachb 01.07.2020 17:57

также безопаснее использовать address=localhost:<debug port>, чем просто выбрать порт

Decoded 06.11.2020 02:28

До версии Java 5.0 используйте аргументы -Xdebug и -Xrunjdwp. Эти параметры по-прежнему будут работать в более поздних версиях, но он будет работать в интерпретируемом режиме вместо JIT, который будет медленнее.

Начиная с Java 5.0, лучше использовать одиночный вариант -agentlib:jdwp:

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

Варианты аргументов -Xrunjdwp или agentlib:jdwp:

  • transport=dt_socket: означает способ, используемый для подключения к JVM (сокет - хороший выбор, его можно использовать для отладки удаленного компьютера)
  • address=8000: открыт порт TCP / IP для подключения от отладчика,
  • suspend=y: если «y», указать JVM подождать, пока отладчик не будет присоединен, чтобы начать выполнение, в противном случае (если «n») немедленно начнет выполнение.

Вы совершенно правы .. Я пробовал с -Xdebug и -Xrunjdwp, но это не сработало. когда я пробовал с -Xrunjdwp или agentlib: jdwp, он работает. (на Java 7)

RoboAlex 01.06.2012 10:02

Это сработало для меня только тогда, когда я заключил его в кавычки, иначе я получил эту ошибку: ОШИБКА: JDWP Несерверный транспорт dt_socket server = y suspend = y address = 8000 должен иметь адрес подключения, указанный с помощью опции 'address ='

Ring 21.04.2016 18:19

Xrunjdwp устарел (или удален?), Почему мы должны выбрать agentlib:jdwp вместо него?

ArtOfWarfare 29.04.2016 20:08

Я думаю, вы ошибаетесь. Netbeans использует -Xdebug -Xrunjdwp при отладке проектов Maven, и они работают как JIT.

Aleksandr Dubinsky 30.05.2016 16:47

Для Java 1.5 или выше:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Для java 1.4:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Для java 1.3:

java -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Вот результат простой программы:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 HelloWhirled
Listening for transport dt_socket at address: 1044
Hello whirled

Вот самое простое решение.

Если вы используете Maven, вам потребуется множество специальных конфигураций среды. Итак, если вы запустите свою программу из maven, просто запустите команду mvnDebug вместо mvn, она позаботится о запуске вашего приложения с настроенной удаленной отладкой. Теперь вы можете просто подключить отладчик к порту 8000.

Он позаботится обо всех проблемах с окружающей средой.

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

Для удаленной отладки необходимо запустить программу с *: по адресу:

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

Просто примечание: ссылка Oracle говорит, что это приведет к тому же старому поведению, но это небезопасно и не рекомендуется.

Chanseok Oh 07.03.2019 21:41

Ява

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8001,suspend=y -jar target/cxf-boot-simple-0.0.1-SNAPSHOT.jar

address указывает порт, на котором разрешена отладка.

Maven

** Отладка приложения Spring Boot с помощью Maven:

mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"

Командная строка

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

Gradle

gradle bootrun --debug-jvm

Maven

mvn spring-boot:run -Drun.jvmArguments = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER

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

Здесь мы просто используем соединитель подключения сокета, который включен по умолчанию, когда настроен транспорт dt_socket и виртуальная машина работает в режиме отладки сервера.

Для более подробной информации можете обратиться к: https://stackify.com/java-remote-debugging/

Другие вопросы по теме