8

Metals 宣布“现在可以使用新的“运行”、“测试”、“调试”和“调试测试”按钮直接从 VS Code 运行和测试。” 有一个很好的 gif 显示它可以做什么,我不知道如何达到这一点。

我尝试使用以下配置启动 VS Code 调试器launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
       {
           "type": "scala",
           "request": "launch",
           "name": "Untitled",
           "mainClass": "com.playZip.Unzip",
           "args": [],
           "jvmOptions": []
       }
    ]
}

并收到此错误消息:

Couldn't find a debug adapter descriptor for debug type 'scala' (extension might have failed to activate)

Gitter scalameta/metals上的某个人遇到了这个问题,答案是他需要 Bloop 来支持 utest,我认为我的需要,因为我的.bloop/play-zip-test.jsonsbt 项目中有一个文件,但如果我的 Bloop 支持 utest 以及该怎么做,我不是 100%如果没有。我尝试运行bloop utest但失败了,因为我没有安装 Bloop CLI。我有金属附带的 Bloop。

4

3 回答 3

6

记录如何运行或调试应用程序 #2005在运行和调试代码中添加了官方调试文档,其中记录了两种方法

  1. 通过代码镜头run | debug 在此处输入图像描述
  2. 通过launch.json配置

这是一个 hello world 示例,如何通过launch.json方法使用 VSC 和 Metals 调试测试。我们将使用 lihaoyi/utest 库并在测试中设置断点。

  1. 执行sbt new scala/scala-seed.g8以创建正确的项目结构

  2. Open...带有 VSC 的 sbt 项目或简单地cd进入项目并执行code .

  3. 用 utest 替换 ScalaTestbuild.sbt

    libraryDependencies += "com.lihaoyi" %% "utest" % "0.7.2" % "test",
    testFrameworks += new TestFramework("utest.runner.Framework")
    
  4. 替换test/scala/example/HelloSpec.scalaHelloTests.scala

    package example
    
    import utest._
    
    object HelloTests extends TestSuite{
      val tests = Tests{
        test("test1"){
          1
        }
      }
    }
    
  5. 导入 sbt 构建View | Command Palette... | Metals: Import Build

  6. 在第 8 行设置断点并单击Run and Debug

    在此处输入图像描述

  7. 选择Test SuitePick the kind of class to debug

  8. 留空Enter the name of the build target

  9. example.HelloTests_Enter the name of the class to debug

  10. Debug example.HelloTests_Enter the name of configuration

  11. 这应该创建.vscode/launch.json

    {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "scala",
                "name": "Debug example.HelloTests",
                "request": "launch",
                "testClass": "example.HelloTests"
            }
        ]
    }       
    
  12. 现在您应该可以Start Debugging通过单击绿色三角形并在断点处停止

    在此处输入图像描述

于 2020-08-13T00:36:27.847 回答
4

不确定您的问题是否已解决,但我之前确实看到过同样的问题。要获取有关该错误的更多信息,您可以检查 Metals 输出。请参见下图:从输出选项卡中,选择金属。应该提供有关错误的更多详细信息。 在此处输入图像描述

就我而言,我收到此错误 ( Couldn't find a debug adapter descriptor for debug type 'scala' (extension might have failed to activate) ) 的原因是因为我的机器中安装的 Java 不支持 JDI。

Message: Debugging is not supported because bloop server is running on a JRE /usr/lib/jvm/java-8-openjdk-amd64/jre with no support for Java Debug Interface: 'JDI implementation is not provided by the vendor'. To enable debugging, install a JDK and restart the bloop server.

我想你的情况可能是一样的。要解决它,只需安装一个支持 JDI 的 Java 实现。例如,openjdk version "11.0.8" 2020-07-14在 Ubuntu 上与 Metals 配合得很好。你可以这样做来安装它。

$ sudo apt install openjdk-11-jdk

如果仍然无法正常工作,请确保Metals: Java Home在 VS Code 设置中指向正确的 Java 版本。

在此处输入图像描述

于 2020-10-23T05:13:48.653 回答
2

我遇到了同样的问题,它归结为buildTarget. 我有一个多模块项目。当我查看金属原木时,我看到的是:

Caused by: scala.MatchError: scala.meta.internal.metals.debug.BuildTargetNotFoundException: Build target not found:  (of class scala.meta.internal.metals.debug.BuildTargetNotFoundException)

我的 Scala 项目

/client_accounts
   /migrations
   /app

将 launch.json 更新为 "buildTarget": "app",并且它工作正常。错误报告可能会更好一些。

因此,如果您收到此错误,请查看日志以查找根本原因。

于 2020-10-31T10:53:47.117 回答