我正在尝试Scala Web框架Scalatra。根据文档here,启用IntelliJ调试的步骤是:
"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
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。
答案 0 :(得分:4)
这是我用于远程调试的内容:
-agentlib:JDWP =运输= dt_socket,服务器= Y,暂停= N,ADDRES S = 5005
您在答案-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
中使用的值在For JDK 1.4.x
字段中使用。
答案 1 :(得分:2)
终于,经过艰苦奋斗!我为我找到了它!
我需要在build.sbt中禁用分叉
fork in Test := false,
这是完全合理的,因为它是第一个可以附加到IDE的JVM。
我希望它可以帮助某人!
答案 2 :(得分:0)
当您使用-jvm-debug启动SBT时,您将调试器附加到该SBT进程,jetty:start将在新进程中fork并运行jetty。为了能够调试您的应用程序,您必须在build.sbt(.settings(debugPort in Jetty := 5005
))或内部SBT repl(set debugPort in Jetty := 5005
)中设置var debugPort,然后使用jetty:debug
启动jetty(I我假设你正在使用xsbt-web-plugin
)。
答案 3 :(得分:0)
在 Scalatra docs 中,第 1 步说更新 build.scala
文件中的 javaOptions。相反,更新 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)