Java 正在运行的调试测试

Java 正在运行的调试测试,java,debugging,testing,playframework,playframework-2.0,Java,Debugging,Testing,Playframework,Playframework 2.0,我在调试一个在游戏中失败的测试时遇到了问题 起初,我无法使其达到断点,这是由测试时发生的新JVM分叉引起的,因此我发现我需要添加: javaOptions in Test ++= Seq( "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998" ) 到build.sbt文件 现在,当我启动调试器(我使用IntelliJ)时,它到达了断点,但问题是它不允许我在启动测试之前启动调试器 如果我使用play debug则p

我在调试一个在游戏中失败的测试时遇到了问题

起初,我无法使其达到断点,这是由测试时发生的新JVM分叉引起的,因此我发现我需要添加:

javaOptions in Test ++= Seq(
    "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998"
)
build.sbt
文件

现在,当我启动调试器(我使用IntelliJ)时,它到达了断点,但问题是它不允许我在启动测试之前启动调试器

如果我使用
play debug
则play启动并打开套接字(9999),然后我可以启动调试器,只有在play控制台中启动我的应用程序(使用run),但我无法对测试执行相同操作。
一旦我使用
playtest
测试就会启动,因此我必须在测试开始运行后启动调试器

有什么办法解决这个问题吗?

谢谢

我就是这样做的,希望能帮助别人

更改build.sbt或build.scala以删除分叉每个测试的默认选项。添加行Keys.fork-in(测试):=false

val main = play.Project(appName, appVersion, appDependencies).settings(
  resolvers += Resolver.sonatypeRepo("snapshots"),
    resolvers += Resolver.sonatypeRepo("releases"),
    Keys.fork in (Test) := false
)
我使用以下命令启动播放会话(我现在使用的是activator),并将其存储为别名

'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'
这样,您可以在调试模式下开始播放,并将idea附加到远程服务器。在intelliJ中添加

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
并将上述情况下的端口设置为localhost 9999


我喜欢这样做的原因是您只需启动一次play服务器,然后将ide连接到远程服务器。然后,您可以通过控制台运行测试,它将命中您的断点,无需重新启动并为每个测试附加ide

更改为
suspend=yes
哦,天哪,这比我预想的要容易得多!现在我觉得自己很愚蠢。谢谢