Какие параметры командной строки Java можно установить для удаленной отладки JVM?

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

Что они и что они значат?

9 ответов

Решение

У меня есть эта статья в закладке на настройку для 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

До 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'), запуск сразу начнется.

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

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

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

Для 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

Джава

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

address указывает порт, на котором он позволит отлаживать

специалист

Отладка приложения 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

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

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

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

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

Если вы используете java 9 или выше, для удаленной отладки (что также имеет место, когда вы используете докер локально), вы должны предоставить --debug *:($port). Потому что из java 9 --debug ($port)позволит отлаживать только локально, а не удаленно.

Таким образом, вы можете предоставить команду в docker-compose, например command: -- /opt/jboss/wildfly/bin/standalone.sh --debug *:8787

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