我在尝试调试在 Play 中失败的测试时遇到问题。
一开始我没法让它打断点,结果是测试时 fork 了一个新的JVM导致的,所以我发现我需要添加:
javaOptions in Test ++= Seq(
"-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998"
)
到 build.sbt
文件。
现在它在我启动调试器时遇到了断点(我使用的是 IntelliJ),但问题是它不允许我在开始测试之前启动调试器。
如果我使用 play debug
然后开始 Play 并打开套接字 (9999) 然后我可以启动调试器然后在 Play 控制台中启动我的应用程序(使用运行),但我可以'对测试做同样的事情..
一旦我使用 play test
测试就会开始,所以我必须在测试开始运行后启动调试器。
有什么办法解决这个问题吗?
谢谢!
最佳答案
我就是这样做的,希望对其他人有所帮助。
更改 build.sbt 或 build.scala 以删除 fork 每个测试的默认选项。添加行 Keys.fork in (Test) := false
val main = play.Project(appName, appVersion, appDependencies).settings(
resolvers += Resolver.sonatypeRepo("snapshots"),
resolvers += Resolver.sonatypeRepo("releases"),
Keys.fork in (Test) := false
)
我使用以下命令开始我的游戏 session (我现在正在使用激活器),我将其存储为别名。
'JAVA_HOME=`/usr/libexec/java_home -v 1.7`; JAVA_OPTS="-Xms1g -Xloggc:gc.log -verbose:gc -XX:+PrintGCDateStamps -server -Xmx2g -Dhttps.port=9443" activator -jvm-debug 9999'
这样您就可以在 Debug模式下开始游戏并将想法附加到远程服务器。在 intelliJ 中你添加
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
并在上面的例子中设置端口 localhost 9999
我喜欢这样做的原因是您启动 Play 服务器一次并将 ide 附加到远程服务器。然后您可以通过控制台运行测试,它会命中您的断点,无需重新启动并为每个测试附加 ide。
关于java - 正在运行的调试测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23390237/