【问题标题】:Debug gradle jettyRun in IntelliJ在 IntelliJ 中调试 gradle jettyRun
【发布时间】:2013-05-13 02:15:48
【问题描述】:

我从命令行运行 Jetty:

export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n"

gradle jettyRun

看看:

Listening for transport dt_socket at address: 9999

...然后在 IntelliJ Idea (Ultimate 12.1.3) 中创建一个具有所有默认值的新远程调试配置,仅将端口更改为 9999。

当我使用远程配置启动(调试)时,我看到:

Connected to the target VM, address: 'localhost:9999', transport: 'socket'

...这让我觉得一切都按预期进行。

然后我提出应该导致命中断点的请求。但是断点永远不会被触发。

我做错了什么?

谢谢。

【问题讨论】:

  • 一个理论是我可能告诉 Gradle 而不是 Jetty 公开调试端口。并且查看 JettyRun 文档,可能没有办法做到这一点。 gradle.org/docs/current/dsl/… ... 使用 Cargo 插件寻找解决方案。但是查看 tomcat 插件,我正在做的事情看起来是正确的:github.com/bmuschko/gradle-tomcat-plugin
  • 您的解决方案适合我。我正在使用 gradle 1.5。您上面的解决方案与stackoverflow.com/questions/9315398/…相同。
  • 如果你看到 Connected to the target VM, address: 'localhost:9999', transport: 'socket' 表示你已连接。我将添加 system.out 以排除您没有触发断点
  • 这应该可以正常工作。 Jetty 和 Gradle 在同一个 JVM 中运行。

标签: debugging intellij-idea jetty gradle remote-debugging


【解决方案1】:

您可以在 gradle.properties 文件中设置“org.gradle.jvmargs”变量。这会导致 JVM 被分叉,这意味着您不再调试正确的进程。

在这种情况下,您不能设置“org.gradle.jvmargs”或将调试参数传递给它。

org.gradle.jvmargs=-XX:MaxPermSize=128m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1233

在 org.gradle.jvmargs 中设置调试参数将配置用于调试的分叉进程。

【讨论】:

  • 我在 gradle.properties 中设置了 java_opts,当然 JVM 也是分叉的。添加 org.gradle.jvmargs 修复它。
【解决方案2】:

在 IntelliJ 中(至少在 12.1.5 上),您只需转到 JetGradle,右键单击 jettyRun,然后单击 Debug。

【讨论】:

  • 我很少投反对票,但我也有强烈的愿望。 “你可以去 JetGradle”……真的吗?如何?您在此处看到 JetGradle 讨论甚至提到过吗?
  • 好点。我想我已经安装了插件并没有注意到。我认为它现在甚至不存在......
猜你喜欢
  • 2014-07-07
  • 1970-01-01
  • 2019-04-23
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2014-03-27
相关资源
最近更新 更多