IntelliJ remote debugger connects, but breakpoints are not working

Viewed 16407

I am trying out the Scala web framework Scalatra. According to the docs here, the steps to enable IntelliJ debugging are:

  1. Add the usual JDK options for remote debugging: "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
  2. Create a "Remote" run configuration in Intellij
  3. Start up sbt, run jetty:start, and then start the remote debugger

When I do this, SBT prints out:

Listening for transport dt_socket at address: 5005

And IntelliJ prints:

Connected to the target VM, address: 'localhost:5005', transport: 'socket'

However, breakpoints do not seem to be working. When I hit the following endpoint, with a breakpoint at the *:

class AppServlet extends AppStack {
  get("/break-test") {
*   val response = "DONE"
    response
  }
}

The code does not stop at that line, but continues so I get the response DONE back.

I am using Java 1.8.0_111, Scala 2.12, and SBT 0.13.15.

4 Answers

Ah finally, After big struggle ! I found it for me !

I needed to disable forking in build.sbt

 fork in Test := false,

It makes total sense, as it's only the first JVM who would get to be attach to the IDE.

I hope it help someone !

In the Scalatra docs, step 1 says to update the javaOptions in the build.scala file. Instead, updating the build.sbt file fixed the issue for me. After updating the correct file, the rest of the steps in the docs worked perfectly.

build.sbt

val ScalatraVersion = "2.7.1"

ThisBuild / scalaVersion := "2.13.4"
ThisBuild / organization := "com.example"

lazy val hello = (project in file("."))
  .settings(
    name := "My Scalatra Web App",
    version := "0.1.0-SNAPSHOT",
    libraryDependencies ++= Seq(
      "org.scalatra" %% "scalatra" % ScalatraVersion,
      "org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test",
      "ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime",
      "org.eclipse.jetty" % "jetty-webapp" % "9.4.35.v20201120" % "container",
      "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided"
    ),
    javaOptions ++= Seq(
      "-Xdebug",
      "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
    ),
  )

enablePlugins(SbtTwirl)
enablePlugins(JettyPlugin)

Related