我有一个 JVM 应用程序,需要在 IntelliJ 2016.3.5 中使用断点和 Gradle 任务(作为依赖项运行和测试)进行调试。
关于如何使用 Gradle 和 IntelliJ 完成调试有多种来源:
- 使用 IntelliJ 调试 Gradle 插件 https://stackoverflow.com/questions/11129401/debug-gradle-plugins-with-intellij
-
使用Intellij在gradle项目中设置断点 https://stackoverflow.com/questions/17179886/using-intellij-to-set-breakpoints-in-gradle-project(最有帮助的一个)
- https://youtrack.jetbrains.com/issue/IDEA-119551 https://youtrack.jetbrains.com/issue/IDEA-119551
- https://youtrack.jetbrains.com/issue/IDEA-86465 https://youtrack.jetbrains.com/issue/IDEA-86465
- https://youtrack.jetbrains.com/issue/IDEA-119494 https://youtrack.jetbrains.com/issue/IDEA-119494
然而,这些来源要么已经过时,要么适用于另一种情况。我不想调试 Gradle 脚本,而是调试运行实际 Java/Scala 应用程序的 JVM。此外,最新版本的 IntelliJ 使用 Gradle Tooling API,它不提供关闭守护进程的选项。仅直接使用运行和测试任务上的调试按钮来提供 JetBrains 的本机支持,但如果它们被定义为其他任务的依赖项(例如检查),则不会提供本机支持。
据消息人士透露,接下来的路是这样的:
run { // or test, doesn't matter
jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
// xor, or both, doesn't seem to make any difference
debug true
}
不管怎样,Gradle(或 JVM)将开始监听端口 5005:
然后,我使用以下参数创建了远程配置:
但是当我启动IntelliJ远程调试任务时,它失败了:
我也尝试过使用端口 5006 和 suspend=n 但没有成功。在此之前,我尝试在 IntelliJ-Gradle 运行任务中使用 Gradle 参数。然后,它确实连接了,但似乎连接到了 Gradle 脚本,而不是应用程序 JVM,因为它没有在断点处中断。如何解决这个问题?
Debugging of gradle tasks like 'test', 'run', actually all gradle tasks that implements JavaForkOptions interface, should work in IntelliJ since 2014 year
![](https://i.stack.imgur.com/Llsnn.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)