У меня есть код Python, который я запускаю с IntelliJ. Код Python выполнит команду java
, которая, в конечном итоге, создаст JVM. Python и JVM обмениваются данными с помощью Py4J и пользовательских сокетов. Как подключиться к JVM для целей отладки с помощью IntelliJ?Подключиться к JVM для отладки, которая была порождена скриптом Python
ответ
Я предполагаю, что ваш код Python запускает команду java
, используя вызов os.system
. Если вы хотите отладить его из IDE, то вы должны включить отладку на породившом JVM (см this темы для возможных вариантов, чтобы включить отладку виртуальной машины Java):
os.system("java -jar your.jar -Xdebug -Xrunjdwp:server=y, transport=dt_socket,address=4000, suspend=y");
В выше коде порождала JVM будет прослушивать порт 4000
для входящих подключений отладчика. Теперь вы можете использовать функцию InteliJ remote debug configuration для подключения к порожденной JVM, используя предоставленный порт. Обратите внимание на параметр suspend=y
- это означает, что JVM будет запущен как приостановлено до тех пор, пока не будет подключен отладчик. Это предотвратит случай, когда вы пропустите интересную часть выполнения JVM, которую вы хотите отлаживать, или предотвратите случай, когда JVM завершил работу после того, как основной поток завершился, прежде чем вы даже можете начать удаленную сессию отладки InteliJ.
Выполняется команда java, которая запускает JVM с аргументами отладки.
I.e. -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
.
Затем в среде IDE создается новое удаленное соединение. На самом деле, когда вы идти о создании нового, когда вы указываете имя хоста и порт он уже дает аргументы, такие как:
аргументы командной строки для запуска удаленной JVM:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000