Какие параметры командной строки 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