Які параметри командного рядка Java потрібно встановити, щоб дозволити віддалену відладку JVM?


321

Я знаю, що є дещо JAVA_OPTSвстановити для віддаленої налагодження програми Java.

Що вони таке і що вони означають?

Відповіді:


303

Цю статтю я взяв у закладки щодо налаштування цього для 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

19
Варто зазначити, що ви, можливо, захочете налаштувати свою адресу, як-от *:1044увімкнути віддалену налагодження з будь-якого комп’ютера
Герр Дерб,

6
HerrDerb правий .. Оскільки Java 9 "адреса = 1044" не завжди прослуховується на всіх інтерфейсах. "address = *: 1044" змушує Java 9+ вести себе як Java 8 ...
alfonx

459

Перед 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 : якщо 'у', скажіть JVM чекати, поки налагоджувач буде приєднаний, щоб розпочати виконання, інакше (якщо 'n'), розпочне виконання відразу.

7
Ви абсолютно правильні .. Я намагався з -Xdebug та -Xrunjdwp, але це не вийшло. коли я намагався з -Xrunjdwp або agentlib: jdwp Це працює. (на Java 7)
RoboAlex

Це працювало для мене лише тоді, коли я ставив цитати навколо нього, інакше я отримав цю помилку: ПОМИЛКА: JDWP Несерверний транспорт dt_socket server = y suspend = y address = 8000 повинен мати адресу з'єднання, вказану через параметр 'address ='
Ring

1
Чи Xrunjdwpзастаріле (чи вилучено?), Чому ми б agentlib:jdwpйого перебирали?
ArtOfWarfare

2
Я думаю, ти помилявся. Netbeans використовує -Xdebug -Xrunjdwpпід час налагодження Maven проектів, і вони працюють так, як вони JITed.
Олександр Дубінський

78

Оскільки 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

1
Це має отримати більше оновлень, оскільки це важливий підказок, який стосується всіх нових версій Java.
Себастьян S

1
Лише зауважуючи: посилання Oracle говорить, що це дозволить досягти такої ж старої поведінки, але це не є безпечним і не рекомендується.
Chanseok О

9

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

5

java

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"

2

Ось найпростіше рішення.

Якщо ви використовуєте Maven, потрібна велика кількість спеціальних конфігурацій середовища. Отже, якщо ви запускаєте програму з Maven, просто запустіть mvnDebugкоманду замість mvn, вона подбає про запуск програми з налаштованою віддаленою налагодженням. Тепер ви можете просто приєднати налагоджувач на порт 8000.

Він піклується про всі проблеми навколишнього середовища для вас.


1

Командний рядок

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

Градле

gradle bootrun --debug-jvm

Мейвен

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

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

Тут ми просто використовуємо з’єднувач Sota Attaching, який увімкнено за замовчуванням, коли транспорт dt_socket налаштований і VM працює в режимі налагодження сервера.

Більш детальну інформацію можна знайти на: https://stackify.com/java-remote-debugging/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.