Удаленный отладчик IntelliJ подключается, но точки останова не работают

Я пробую веб-фреймворк Scala Scalatra. Согласно документам здесь, шаги для включения отладки IntelliJ:

  1. Добавьте обычные параметры JDK для удаленной отладки: "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
  2. Создайте конфигурацию удаленного запуска в Intellij.
  3. Запустите sbt, запустите jetty:start, а затем запустите удаленный отладчик.

Когда я это делаю, SBT выводит:

Listening for transport dt_socket at address: 5005

И IntelliJ печатает:

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

Однако точки останова, похоже, не работают. Когда я попадаю в следующую конечную точку с точкой останова на *:

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

Код не останавливается на этой строке, а продолжается, поэтому я получаю ответ DONE.

Я использую Java 1.8.0_111, Scala 2.12 и SBT 0.13.15.


person Joaquim d'Souza    schedule 28.05.2017    source источник


Ответы (4)


Это то, что я использую для удаленной отладки:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,addres‌​s=5005.

Значение, которое вы указали выше в своем ответе, -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005, используется в поле For JDK 1.4.x.

person brunovianarezende    schedule 31.05.2017

Ах, наконец, После большой борьбы! Я нашел его для себя!

Мне нужно было отключить разветвление в build.sbt

 fork in Test := false,

Это имеет смысл, так как это только первая JVM, которую можно подключить к IDE.

Я надеюсь, что это поможет кому-то!

person tdebroc    schedule 02.07.2020

Когда вы запускаете SBT с помощью -jvm-debug, вы подключаете отладчик к этому процессу SBT, jetty:start разветвляется и запускает jetty в новом процессе. Чтобы иметь возможность отлаживать свое приложение, вы должны установить var debugPort в build.sbt (.settings(debugPort in Jetty := 5005)) или Insider SBT repl (set debugPort in Jetty := 5005), а затем запустить пристань с помощью jetty:debug (я предполагаю, что вы используете xsbt-web-plugin).

person brunovianarezende    schedule 29.05.2017
comment
Ах, хорошо, я где-то видел, что пристань работает на той же JVM, что и SBT, но попробую. - person Joaquim d'Souza; 30.05.2017
comment
Для этого мне пришлось использовать xsbt-web-plugin 3.0, это код в plugin.sbt: addSbtPlugin("com.earldouglas" %% "xsbt-web-plugin" % "3.0.0") - person brunovianarezende; 30.05.2017
comment
Это имело большой смысл, но не сработало. У меня есть: addSbtPlugin("com.earldouglas" %% "xsbt-web-plugin" % "3.0.1") И затем > set debugPort in Jetty := 5005 > jetty:debug Что выводит: > Listening for transport dt_socket at address: 5005 И я запускаю Debug из IntelliJ, чтобы получить: Connected to the target VM, address: 'localhost:5005', transport: 'socket' Но все еще не повезло с точками останова :-( - person Joaquim d'Souza; 30.05.2017
comment
Итак, мой IntelliJ устарел примерно на 1 год, поэтому позвольте мне обновить это! - person Joaquim d'Souza; 30.05.2017
comment
также это то, что я использую в Intellij для удаленной отладки: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005. То, что вы показываете выше, используется в For JDK 1.4.x - person brunovianarezende; 30.05.2017
comment
Это сработало! Можете ли вы добавить это как ответ, чтобы я мог его принять? Мне не нужно было использовать xsbt-web-plugin или set debugPort in Jetty := 5005 - person Joaquim d'Souza; 31.05.2017
comment
но вам нужно было использовать причал: отладка? - person brunovianarezende; 31.05.2017

В документах Scalatra шаг 1 говорит об обновлении javaOptions в файле build.scala. . Вместо этого обновление файла build.sbt устранило проблему для меня. После обновления правильного файла остальные шаги в документации работали отлично.

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)

person Brian Guilder    schedule 13.06.2021