【发布时间】: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