如何解决我到底如何使用Metals和VS Code调试器?
Metals announced说:“现在可以使用新的“运行”,“测试”,“调试”和“调试测试”按钮直接从VS Code运行和测试。”有一个漂亮的gif文件显示了它可以做什么,我不知道该怎么做。
我尝试在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,我认为我的确这样做是因为我的sbt项目中有一个文件.bloop/play-zip-test.json
,但我不是100%如果我的Bloop支持utest,不支持该怎么办。我尝试运行bloop utest
,但由于未安装Bloop CLI而失败。我有金属随附的Bloop。
解决方法
Document how to run or debug applications #2005在Running and debugging your code添加了正式的调试文档,其中记录了两种方法
这是一个世界末日的示例,介绍如何通过launch.json
方法使用VSC和Metals调试测试。我们将使用
lihaoyi / utest库并在测试中设置断点。
-
执行
sbt new scala/scala-seed.g8
以创建正确的项目结构
使用VSC的 -
Open...
sbt项目或仅将cd
插入项目并执行code .
-
在
build.sbt
中用utest替换ScalaTest。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 } } }
-
使用
View | Command Palette... | Metals: Import Build
导入sbt构建 -
在第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.
我想你的情况可能是一样的。要解决此问题,只需安装支持JDI的Java实现即可。例如,openjdk version "11.0.8" 2020-07-14
在Ubuntu上与Metals配合良好。您可以执行此操作来安装它。
$ sudo apt install openjdk-11-jdk
如果仍然无法运行,请确保VS Code设置中的Metals: Java Home
指向正确的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",
,并且可以正常工作。错误报告可能会更好。
因此,如果出现此错误,请查看根本原因的日志。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。