我在尝试调试Play中失败的测试时遇到问题。
起初我无法让它达到一个突破点,结果是由于测试时发生的新JVM的分叉造成的,所以我发现我需要添加:
javaOptions in Test ++= Seq(
"-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998"
)
到build.sbt
文件。
现在它在我启动调试器时遇到了断点(我正在使用IntelliJ),但问题是它不会让我在启动测试之前启动调试器。
如果我使用play debug
然后播放开始并打开套接字(9999)然后我可以启动调试器,然后才能在播放控制台启动我的应用程序(使用运行),但我不能这样做与测试相同..
一旦我使用play test
测试开始,所以我必须在测试开始运行后启动调试器。
有什么方法可以解决这个问题吗? 谢谢!
答案 0 :(得分:4)
这就是我如何做到这一点,希望能帮助别人。
更改build.sbt或build.scala以删除分支每个测试的默认选项。在(测试)中添加 Keys.fork行:= false
val main = play.Project(appName, appVersion, appDependencies).settings(
resolvers += Resolver.sonatypeRepo("snapshots"),
resolvers += Resolver.sonatypeRepo("releases"),
Keys.fork in (Test) := false
)
我使用以下命令启动我的播放会话(我现在使用激活器),我将其存储为别名。
'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'
这样您就可以在调试模式下开始播放,并将想法附加到远程服务器。在intelliJ中你添加
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
并在上面的案例中将端口设置为 localhost 9999
我喜欢这样做的原因是你启动播放服务器一次并将ide附加到远程服务器。然后,您可以通过控制台运行测试,它将触及您的断点,无需重新启动并为每个测试附加ide。