【问题标题】:Intellij IDEA debugger not working on Gradle Vert.X projectIntellij IDEA 调试器不适用于 Gradle Vert.X 项目
【发布时间】:2018-01-08 17:50:36
【问题描述】:

我正在使用Vert.X 框架和Gradle 构建工具开发一个项目。我遇到的问题是IntelliJ 中的断点根本无法以我尝试过的任何方式工作。

这是我在 Gradle 中使用的 Vert.X 的运行配置:

run {
    args = [
            'run', mainVerticleName,
            "-conf", confPath,
            "--redeploy=$project.ext.watchForChange",
            "--launcher-class=$mainClassName",
            "--on-redeploy=$project.ext.doOnChange"
    ]
}

所以部署是使用Gradle 完成的,运行没有任何问题,IntelliJ 调试器已连接,但断点不起作用

我尝试过的方法:

1) Gradle 运行配置。这是Intellij IDEA 的运行配置:

尝试使用远程调试工具,使用以下 VM 选项启动应用程序:

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

但这没有用。

2) 应用配置:

在这种情况下,我无法启动项目,因为我在启动时收到以下消息:

Error: Could not find or load main class io.vertx.core.Launcher

Vert.X Core 库在类路径中,配置似乎正确,所以无法获取是问题所在。

项目源码公开,可在GitHub

vertx-gradle-architecture-starter

Vert.X 版本 - 3.4.0。 Gradle 版本 - 3.4.1。 IntelliJ IDEA 版本 - 2016.3.5。操作系统 - MacOS Sierra 10.12.3。

有趣的事实是当我从测试中部署Vert.X 时——断点工作。 任何想法为什么断点在我上面描述的情况下不起作用?

【问题讨论】:

  • 至少你的第二个选项应该可以工作!您使用的是哪个版本的 vert.x?也许是旧版本没有io.vertx.core.Launcher
  • 它是io.vertx.core.Launcher,您可以在屏幕截图中看到。我在启动此配置时收到消息Error: Could not find or load main class io.vertx.core.Launcher,因此无法对调试器进行事件检查。我的依赖项中有vertx-core
  • 抱歉,我没有看到您指定您使用的是 3.4.0。我得到了你的 GitHub 项目,并在本地尝试了屏幕截图中的配置。有用!尝试在 Intellij 中清理/重建项目。
  • 应用程序配置 - 2. 和你的截图一模一样。 see screenshot。我没有其他提示,抱歉:-(
  • 它不起作用,因为启动了 2 个 JVM,一个带有启动器的启动器使用调试选项启动,然后它使用应用程序代码生成另一个 JVM,它没有在调试模式下运行,调试器是连接到没有与断点对应的代码的第一个 VM,因为它在第二个 VM 中运行。检查您的进程树。应该有一种方法可以为生成的 VM 指定 VM 选项(通过args),然后您就可以对其使用远程调试。

标签: java debugging intellij-idea gradle vert.x


【解决方案1】:

以下是这两个问题的解决方案。感谢@CrazyCoder 在这方面的帮助。

1) run 命令在单独的虚拟机中运行。所以,为了让它工作,我在脚本中添加了--java-opts 参数:

run {
    args = [
            'run', mainVerticleName,
            "-conf", confPath,
            "--redeploy=$project.ext.watchForChange",
            "--launcher-class=$mainClassName",
            "--on-redeploy=$project.ext.doOnChange",
            // used for attaching remote debugger
            "--java-opts", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000"
    ]
}

这允许在端口8000 上附加Remote debug 配置。

2) 默认情况下,Intellij IDEA 为每个源集创建单独的模块,因此我有 api_mainapi_test 模块的源集。关闭此功能后 - 应用程序调试运行开始工作。

这可以在 Gradle 设置中关闭。 Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle:取消选中为每个源集创建单独的模块。

这是一个IntelliJ IDEA 问题 - reference

【讨论】:

  • 如果没有“为每个源根创建单独的模块”,并且当有多个 src/main(例如 src/integrationTest)时,您将出错 - IntelliJ 不会知道该模块的配置(类路径等)
【解决方案2】:

我遇到了完全相同的问题,以下对我有用。在 intelliJ 中不需要重新部署、启动器和重新部署选项。如果我们在应用程序启动后删除那些调试工作。

run {
    args = [
        'run', mainVerticleName,
        "-conf", confPath
    ]
}

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多