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

时间:2015-08-13 10:56:52

标签: java python debugging jvm py4j

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

2 个答案:

答案 0 :(得分:1)

执行java命令,该命令使用调试参数生成JVM。

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

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

  

运行远程JVM的命令行参数:

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

答案 1 :(得分:1)

我假设您的Python代码使用os.system调用生成java命令。如果要从IDE调试它,那么您应该在生成的JVM上打开调试(有关启用JVM调试的可能选项,请参阅this主题):

    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远程调试会话之前防止出现这种情况。