我正在尝试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。
这是我用于远程调试的内容:
-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
字段中使用。
当您使用-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(我假设您使用的是xsbt-web-plugin
)。