Подключите отладчик IntelliJ IDEA к работающему процессу Java

238

Можно ли подключить отладчик IntelliJ IDEA к работающему процессу Java? Если да, то как?

Marco
источник
3
Конечно. Вам необходимо создать «Удаленную» конфигурацию Run / Debug. Больше здесь
Вик
2
Хм, эти аргументы командной строки ЧИТАЮТ ТОЛЬКО с 14.0.2. Вы можете редактировать только пару из них, что не поможет решить проблему в этом вопросе. Есть идеи как это исправить?
нуццолило
Ответ здесь: stackoverflow.com/questions/51207430/…
RoutesMaps.com

Ответы:

374

Да! Вот как вы это настроили.

Запустить конфигурацию

Создайте конфигурацию удаленного запуска:

  1. Выполнить -> Редактировать конфигурации ...
  2. Нажмите «+» в левом верхнем углу
  3. Выберите опцию «Удаленный» в самой левой панели
  4. Выберите имя (я назвал мой "удаленной отладки")
  5. Нажмите «ОК», чтобы сохранить:

введите описание изображения здесь

Параметры JVM

Приведенная выше конфигурация предоставляет три поля только для чтения. Это параметры, которые сообщают JVM открыть порт 5005 для удаленной отладки при запуске приложения. Добавьте соответствующий параметр в параметры JVM отлаживаемого приложения. Один из способов сделать это был бы так:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

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

Вы можете изменить suspend=nэто, suspend=yчтобы заставить ваше приложение ждать, пока вы не подключитесь к IntelliJ, прежде чем оно запустится. Это полезно, если точка останова, на которую вы хотите попасть, возникает при запуске приложения.

Отлаживать

Запустите ваше приложение, как обычно, затем в IntelliJ выберите новую конфигурацию и нажмите «Отладка».

введите описание изображения здесь

IntelliJ подключится к JVM и инициирует удаленную отладку.

Теперь вы можете отлаживать приложение, добавляя точки останова в ваш код, где это необходимо. Вывод приложения будет по-прежнему отображаться там, где он был раньше, но ваши точки останова попадут в IntelliJ.

Кори Кляйн
источник
2
Опция «Удаленный» отсутствует в моем Intellij IDEA 15.0.2 на Mac OS El Capitan. Как я могу получить эту опцию?
user674669
@ user674669 Я не уверен. Может быть, Remoteнедоступно в версии сообщества? Я пользуюсь платной версией. Кто-нибудь с публикацией сообщества может подтвердить?
Кори Кляйн
@CoryKlein Знаете ли вы, как получить выходные данные System.out.printlnв IntelliJ при удаленной отладке?
Дон Румми
1
@DonRhummy Если вы выясните, как, я был бы рад добавить эту информацию к этому ответу, но AFAIK IntelliJ в настоящее время не поддерживает передачу stdout и stderr из удаленного приложения обратно в IntelliJ.
Кори Кляйн
Если удаленный сервер доступен только через ssh, как мы можем указать файл ключа?
Вач
44

Это возможно, но вы должны добавить некоторые флаги JVM при запуске приложения.

Вы должны добавить удаленную конфигурацию отладки: Изменить конфигурацию -> Удаленный.

Затем в отображаемом диалоговом окне вы найдете параметры, которые вы должны добавить к выполнению программы, например:

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

Затем, когда ваше приложение запущено, вы можете подключить ваш отладчик. Если вы хотите, чтобы ваше приложение ожидало подключения отладчика, просто измените флаг приостановки на y ( suspend=y)

Якуб Кубринский
источник
Меня смутило, что вы редактируете входные данные ниже, а затем обновляете строки параметров выше (по крайней мере, в 13.1 CE).
Carl G
7
Хм, эти аргументы командной строки ЧИТАЮТ ТОЛЬКО с 14.0.2. Вы можете редактировать пару из них. Есть идеи как это исправить?
нуццолило
1
Кроме того, к какому процессу вы подключаетесь, устанавливая эти параметры?
нуццолило
5
Первый работал на меня. Примечание для других - мне нужно было указать это перед флагом -jar.
Джим
2
@Nuzzolilo, аргументы командной строки, отображаемые в идее, предназначены только для отображения и, следовательно, они доступны только для чтения. Они не должны быть добавлены к идее, а к удаленному Java-приложению, которое вы хотите отлаживать.
Ганеш Кришнан
6

в AndroidStudio или идея

  1. Конфигурация приложения будет отлажена, откройте Edit Configurations

добавить "VM Options" Config “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” запомнить "адрес"

введите описание изображения здесь

  1. Config Remote Debugger, если нет, нажмите +, чтобы добавить

укажите «Порт» так же, как в шаге 1 «адрес» введите описание изображения здесь

Билл
источник
6

Также не забывайте, что вам нужно добавить флаг "-Xdebug" в приложение JAVA_OPTS, если вы хотите подключиться в режиме отладки.

Максимум
источник
0

Также я использую приложение Tomcat GUI (в моем случае: C: \ tomcat \ bin \ Tomcat9w.bin).

  • Перейти на вкладку Java :

    введите описание изображения здесь

  • Установите ваши свойства Java, например:

    Виртуальная машина Java

    C: \ Program Files \ Java \ jre-10.0.2 \ bin \ server \ jvm.dll

    Виртуальная машина Java

    C: \ Tomcat \ Bin \ bootstrap.jar; C: \ Tomcat \ Bin \ juli.jar-кот

    Параметры Java :

    -Dcatalina.home = C: \ мартовский кот

    -Dcatalina.base = C: \ мартовский кот

    -Djava.io.tmpdir = C: \ Tomcat \ Temp

    -Djava.util.logging.config.file = C: \ Tomcat \ конф \ logging.properties

    -agentlib: JDWP = транспорт = транспорт по сокетам, сервер = у, подвесьте = п, адрес = *: 8000

    Варианты Java 9 :

    --add открывает = java.base / java.lang = ALL-UNNAMED

    --add открывает = java.base / java.io = ALL-UNNAMED

    --add открывает = java.rmi / sun.rmi.transport = ALL-UNNAMED

Тарас Мельник
источник