如何在测试中附加Scala Intellij调试器?

7

如何配置IntelliJ调试器来附加到由sbt管理的Scala Play测试?


在IntelliJ 2019中,您可以使用sbt shell中的调试按钮,无需更改配置,将调试器附加到sbt run命令。
但是,调试器不会附加到test命令。


例如,下载起始项目,并使用默认设置导入到IntelliJ中。启动"Sbt Shell",启用调试,添加一些断点,并运行test - Jethro
2个回答

10
考虑通过IntelliJ的sbt shell附加调试器:
  1. sbt项目工具窗口中选择复选框使用sbt shell进行构建
  2. 打开sbt shell工具窗口(通常位于底部)
  3. 单击附加调试器到sbt shell按钮(图标看起来像一个虫子)
  4. 状态栏中,应该显示已连接到目标VM(参见下面的图像)
  5. 在测试中设置断点
  6. sbt shell工具窗口中执行test命令
  7. 调试sbt shell窗口应该打开,并且执行应该在第一个断点处停止。

enter image description here


请注意,如果您正在像OP一样使用Play框架,则默认情况下Play会在分叉的JVM中运行测试,因此要使上述技术起作用,请尝试在build.sbt中设置Test / fork := false

1
谢谢,但在IntelliJ 2019.2和sbt 1.2.8(mac)中,这并不起作用。在第3步之前,我必须点击绿色图标以“重新启动sbt shell”,然后才能单击bug图标。然而,shell没有显示第4步的文本。屏幕截图显示了构建设置和文本。 - Jethro
1
@Jethro 第4步的文本未在sbt shell中显示。它仅在屏幕底部的细状态行中短暂显示。无需重新启动sbt shell。我的机器也是Mac,并且使用相同版本的Intellij和sbt。 - Mario Galic
1
@Jethro 状态栏可以通过 View | Appearance | Status Bar 启用。无需重新安装 IntelliJ。 - Mario Galic
1
@Jethro,你是否在分叉JVM,也就是说,在build.sbt中是否有Test/fork:=true - Mario Galic
1
我成功地将调试器附加到sbt shell上,但是当我执行测试时,断点无法停止进程。有什么想法吗? - Radu Linu
显示剩余3条评论

5

首先,您需要在SBT中使用-jvm-debug [port]运行:

sbt -jvm-debug 5005

接着打开 运行/调试配置 对话框,点击 远程

在新建的配置中设置正确的主机和端口(通常是 localhost5005),然后点击应用。

debug

之后只需要运行这个配置并设置断点即可。之后只需在 SBT 控制台中运行 test 命令。


4
注意 - 如果使用Play框架,您还需要将Test / fork := false添加到build.sbt中。此修改有效!谢谢! - Jethro
1
我成功执行了命令sbt -jvm-debug 5005并附加了Debug remote,但是当我使用test执行测试时,断点无法停止进程。甚至不能作为有效的断点进行验证。有任何想法吗? - Radu Linu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接