Как именно использовать 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 добавлена официальная документация по отладке в разделе Запуск и отладка вашего кода, в которой описаны два подхода.
- через кодовые линзы
run | debug
- через
launch.json
конфигурация
Вот приветственный пример того, как отлаживать тест с использованием VSC и Metals через launch.json
подход. Мы будем использовать библиотеку lihaoyi/utest и установим точку останова в тесте.
Выполнить
sbt new scala/scala-seed.g8
создать правильную структуру проектаOpen...
sbt с VSC или простоcd
в проект и выполнитьcode .
Замените ScalaTest на utest в
build.sbt
libraryDependencies += "com.lihaoyi" %% "utest" % "0.7.2" % "test", testFrameworks += new TestFramework("utest.runner.Framework")
Заменить
test/scala/example/HelloSpec.scala
с участиемHelloTests.scala
package example import utest._ object HelloTests extends TestSuite{ val tests = Tests{ test("test1"){ 1 } } }
Импортировать сборку sbt с помощью
View | Command Palette... | Metals: Import Build
Поместите точку останова в строке 8 и нажмите
Run and Debug
Выбрать
Test Suite
заPick the kind of class to debug
Оставьте пустым для
Enter the name of the build target
Напишите
example.HelloTests
заEnter the name of the class to debug
Напишите
Debug example.HelloTests
заEnter the name of configuration
Это должно создать
.vscode/launch.json
{ "version": "0.2.0", "configurations": [ { "type": "scala", "name": "Debug example.HelloTests", "request": "launch", "testClass": "example.HelloTests" } ] }
Теперь вы сможете
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",
и это сработало. Отчет об ошибках может быть немного лучше.
Поэтому, если вы получили эту ошибку, посмотрите журналы для определения основной причины.