dap-mode icon indicating copy to clipboard operation
dap-mode copied to clipboard

Q: Scala/SBT debug template fails with NoSuchElementException

Open bahmanm opened this issue 2 years ago • 3 comments

Hey 👋 I'm trying to debug a Scala/SBT application using a custom template as below:

(dap-register-debug-template
  "My Scala Attach"
  (list :type "scala"
        :request "attach"
        :name "My Scala Attach"
        :hostName "localhost"
        :port 5005
        :buildTarget "app"))

However, it keeps failing with the following in *Messages*:

helm-M-x-execute-command: ‘workspace/executeCommand’ with ‘debug-adapter-start’ failed.

(error "Internal error.")

And this is the relevant excerpt from metals.log:

May 02, 2023 8:49:21 AM org.eclipse.lsp4j.jsonrpc.RemoteEndpoint fallbackResponseError
SEVERE: Internal error: java.util.NoSuchElementException: None.get
java.util.concurrent.CompletionException: java.util.NoSuchElementException: None.get
	at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:292)
	at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:308)
	at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:661)
	at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:646)
	at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
	at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
	at scala.concurrent.java8.FuturesConvertersImpl$CF.apply(FutureConvertersImpl.scala:29)
	at scala.concurrent.java8.FuturesConvertersImpl$CF.apply(FutureConvertersImpl.scala:26)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:484)
	at scala.concurrent.ExecutionContext$parasitic$.execute(ExecutionContext.scala:222)
	at scala.concurrent.impl.Promise$Transformation.submitWithValue(Promise.scala:429)
	at scala.concurrent.impl.Promise$DefaultPromise.submitWithValue(Promise.scala:338)
	at scala.concurrent.impl.Promise$DefaultPromise.tryComplete0(Promise.scala:285)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:504)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)
Caused by: java.util.NoSuchElementException: None.get
	at scala.None$.get(Option.scala:627)
	at scala.None$.get(Option.scala:626)
	at scala.meta.internal.metals.debug.SourcePathAdapter$.apply(SourcePathAdapter.scala:72)
	at scala.meta.internal.metals.debug.MetalsDebugAdapter$.2$u002Ex(MetalsDebugAdapter.scala:70)
	at scala.meta.internal.metals.debug.DebugProvider.$anonfun$start$12(DebugProvider.scala:165)
	at scala.meta.internal.metals.debug.DebugServer.loop$1(DebugServer.scala:21)
	at scala.meta.internal.metals.debug.DebugServer.listen$lzycompute(DebugServer.scala:34)
	at scala.meta.internal.metals.debug.DebugServer.listen(DebugServer.scala:19)
	at scala.meta.internal.metals.debug.DebugProvider.start(DebugProvider.scala:190)
	at scala.meta.internal.metals.debug.DebugProvider.$anonfun$start$5(DebugProvider.scala:110)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:470)
	... 3 more

Am I missing anything obvious? I'd appreciate any hint/help here before going down a potential rabbit hole 🙏

bahmanm avatar May 02 '23 15:05 bahmanm

There is this in attach template: https://github.com/scalameta/metals-vscode/blob/main/packages/metals-vscode/package.json#L944

And the crash happens here:

https://github.com/scalameta/metals/blob/b1532e787797355855371a619302327a078da34b/metals/src/main/scala/scala/meta/internal/metals/debug/SourcePathAdapter.scala#L66

I don't know that that is in scala context, but maybe you know.

yyoncho avatar May 02 '23 17:05 yyoncho

Thanks for promptly looking into it 🙏 That's exactly where my search stopped too. After reading the code, to my mind, a buildTarget identifies the SBT subproject/classpath you'd want to debug.

It looks like the only way to solve this is to clone metals repo, install a local version and try to debug-log the root cause but since this is quite involved I thought I'd ask the community in case I'm overlooking something 😕

bahmanm avatar May 02 '23 18:05 bahmanm

AFAICS it says in their docs/samples.

 // name of the module that is being debugging

yyoncho avatar May 02 '23 20:05 yyoncho