IntelliJ 远程调试器连接,但断点不起作用
IntelliJ remote debugger connects, but breakpoints are not working
我正在试用 Scala Web 框架 Scalatra。根据文档 here,启用 IntelliJ 调试的步骤是:
- 添加常用的 JDK 远程调试选项:
"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
- 在 Intellij 中创建 "Remote" 运行 配置
- 启动
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.
当您使用 -jvm-debug 启动 SBT 时,您会将调试器附加到该 SBT 进程,jetty:start 将在新进程中分叉并 运行 码头。为了能够调试您的应用程序,您必须在 build.sbt (.settings(debugPort in Jetty := 5005
)) 或内部 SBT repl (set debugPort in Jetty := 5005
) 中设置 var debugPort,然后使用 jetty:debug
启动码头(我假设您使用的是 xsbt-web-plugin
)。
这是我用于远程调试的:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005.
您在上面的答案中使用的值 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
用于 For JDK 1.4.x
字段。
啊,终于,经过一番苦战!我帮我找到了!
我需要在 build.sbt
中禁用分叉
fork in Test := false,
这完全有道理,因为它只是第一个附加到 IDE 的 JVM。
希望对大家有所帮助!
在 Scalatra docs 中,第 1 步表示要更新 build.scala
文件中的 javaOptions。相反,更新 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)
我正在试用 Scala Web 框架 Scalatra。根据文档 here,启用 IntelliJ 调试的步骤是:
- 添加常用的 JDK 远程调试选项:
"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
- 在 Intellij 中创建 "Remote" 运行 配置
- 启动
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.
当您使用 -jvm-debug 启动 SBT 时,您会将调试器附加到该 SBT 进程,jetty:start 将在新进程中分叉并 运行 码头。为了能够调试您的应用程序,您必须在 build.sbt (.settings(debugPort in Jetty := 5005
)) 或内部 SBT repl (set debugPort in Jetty := 5005
) 中设置 var debugPort,然后使用 jetty:debug
启动码头(我假设您使用的是 xsbt-web-plugin
)。
这是我用于远程调试的:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005.
您在上面的答案中使用的值 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
用于 For JDK 1.4.x
字段。
啊,终于,经过一番苦战!我帮我找到了!
我需要在 build.sbt
中禁用分叉 fork in Test := false,
这完全有道理,因为它只是第一个附加到 IDE 的 JVM。
希望对大家有所帮助!
在 Scalatra docs 中,第 1 步表示要更新 build.scala
文件中的 javaOptions。相反,更新 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)