【问题标题】:Intellij CE 2018.2 + SBT in docker container: Remote debug breakpoints not workingDocker 容器中的 Intellij CE 2018.2 + SBT:远程调试断点不起作用
【发布时间】:2018-08-22 07:04:06
【问题描述】:

我有一个 Spark 应用程序,我已经为其实施了许多测试。我在 docker 容器内的 SBT shell 中运行此测试。我需要通过从 Intellij 连接来调试应用程序,即使它连接到 SBT shell 的运行实例,断点也会被完全忽略。

我将 fork/test 设置为 false。

还使用此 cmd 在容器内启动 SBT shell:

  • export SBT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -Xmx4G"

  • 后跟命令:sbt.

显示消息

在地址:5005 监听传输 dt_socket

SBT shell 暂停直到 Intellij 调试器连接到指定端口。

现在我转到 Intellij Remote 调试器,调试控制台显示以下消息:

连接到目标VM,地址:'localhost:5005',传输: '套接字'

最后,SBT 恢复并开始下载依赖项。

当我跑步时:

test:testOnly fully.qualified.class.name

并提交断点,执行测试用例但忽略所有断点。

我不知道还能尝试什么!请帮忙!

【问题讨论】:

  • 测试可能正在启动额外的 JVM 进程。在这种情况下调试 sbt 进程将不起作用,而是需要将调试器连接到测试启动的进程。
  • 感谢 Justin,我已将 test/fork 设置为 false 以避免在新的 JVM 进程中执行。
  • 这只会禁用 sbt 分叉进程,但测试本身可能会启动其他进程。您必须检查您的测试是否属于这种情况。
  • 测试不会启动额外的进程。检查我的答案。

标签: scala docker intellij-idea sbt remote-debugging


【解决方案1】:

除了将 test/fork 设置为 false 之外,fork 通常也应该设置为 false。这包括运行、构建等。

另外,确保 SBT_OPTS 中的挂起标志设置为 yes,以便它等待 Intellij Remote Debugger 连接到它以执行测试。

就是这样,这就是我在从 docker 运行时获得断点工作的方式。

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 2013-05-06
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多