连接到 JVM 以进行由 Python 脚本生成的调试

Connect to JVM for debugging that has been spawned by a Python script

我有一个 Python 代码,我 运行 使用 IntelliJ。 Python 代码将执行 java 命令,最终会生成一个 JVM。 Python 和 JVM 使用 Py4J 和自定义套接字进行通信。如何使用 IntelliJ 连接到 JVM 进行调试?

您执行 java 命令生成带有调试参数的 JVM。

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

然后在 IDE 中创建一个新的远程连接。 事实上,当你开始创建一个新的时,当你指定主机和端口时,它已经为你提供了参数,例如:

Command line arguments for running remote JVM:

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

我假设您的 Python 代码使用 os.system call. If you want to debug it from your IDE then you should turn on debugging on the spawned JVM (see this 主题生成 java 命令以提供启用 JVM 调试的可能选项):

    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 远程调试会话。