Как именно использовать Metals и VS Code Debugger?

Metals объявили, что "теперь можно запускать и тестировать прямо из VS Code, используя новые кнопки" Выполнить ", " Тест ", " Отладка "и" Тест отладки ". Есть хорошая гифка, показывающая, на что она способна, и я не знаю, как до нее добраться.

Я попытался запустить отладчик 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)

У кого-то из https://gitter.im/scalameta/metals была эта проблема, и он ответил, что ему нужен Bloop для поддержки utest, и я думаю, что мой поддерживает, потому что есть файл.bloop/play-zip-test.jsonв моем проекте sbt, но я не на 100%, если мой Bloop поддерживает utest, и что делать, если нет. Я пробовал бежатьbloop utestи это не удалось, потому что у меня не установлен Bloop CLI. У меня есть Bloop, который поставляется с металлами.

1 ответ

Документируйте, как запускать или отлаживать приложения #2005 добавлена ​​официальная документация по отладке в разделе Запуск и отладка вашего кода, в которой описаны два подхода.

  1. через кодовые линзы run | debug
  2. через launch.json конфигурация

Вот приветственный пример того, как отлаживать тест с использованием VSC и Metals через launch.jsonподход. Мы будем использовать библиотеку lihaoyi/utest и установим точку останова в тесте.

  1. Выполнить sbt new scala/scala-seed.g8 создать правильную структуру проекта

  2. Open... sbt с VSC или просто cd в проект и выполнить code .

  3. Замените ScalaTest на utest в build.sbt

    libraryDependencies += "com.lihaoyi" %% "utest" % "0.7.2" % "test",
    testFrameworks += new TestFramework("utest.runner.Framework")
    
  4. Заменить test/scala/example/HelloSpec.scala с участием HelloTests.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 Suite за Pick 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 щелкнув зеленый треугольник и остановившись на точке останова

Не уверен, что ваша проблема решена, но я видел ту же проблему раньше. Чтобы получить дополнительную информацию об ошибке, вы можете проверить вывод 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.

Думаю, ваш случай, вероятно, такой же. Чтобы решить эту проблему, просто установите реализацию Java, поддерживающую JDI. Например, openjdk version "11.0.8" 2020-07-14отлично работает с Metals на Ubuntu. Вы можете сделать это, чтобы установить его.

       $ sudo apt install openjdk-11-jdk

Если по-прежнему не работает, убедитесь Metals: Java Home в настройках VS Code указывает на правильную версию Java.

Я столкнулся с той же проблемой, и дело дошло до 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",и это сработало. Отчет об ошибках может быть немного лучше.

Поэтому, если вы получили эту ошибку, посмотрите журналы для определения основной причины.

Другие вопросы по тегам