如何使用激活器调试Play应用程序?

时间:2013-10-20 04:29:15

标签: playframework-2.0 typesafe-activator

我知道,对于经典的Play框架,它是play debug ~run。我尝试运行activator debug ~run但是我收到以下错误:

[error] Not a valid command: debug (similar: idea)
[error] Not a valid project ID: debug
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: debug (similar: debianSign, node)
[error] debug
[error]      ^

我做错了什么?

5 个答案:

答案 0 :(得分:58)

如果您刚刚执行activator ~run,那么您应该能够通过以下方式传递JVM调试端口选项:

./activator -jvm-debug <port> ~run

这可能与play-run不同,但这里是它添加到命令行的参数:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=<port>

自: https://github.com/typesafehub/activator/blob/master/dist/src/templates/activator#L107

我已经在IDE中成功附加到此过程。

如果您在Windows中运行,则自动配置会有所不同。使用最新的激活器,您可以执行以下操作:

  1. 打开%UserProfile%\.activator\activatorconfig.txt(根据您的Windows安装,UserProfile会有所不同。我在一次安装时为C:\Documents and Settings\jsuereth,在另一次安装时为C:\Users\jsuereth。过去文件中的以下内容: -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=<PUT YOUR PORT HERE>
  2. 您可以在启动激活器之前在命令行上设置JAVA_OPTS属性,例如 set "JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=<port>"
  3. 希望有所帮助!

答案 1 :(得分:4)

我有windows7和激活器1.2.12,上面的答案对我不起作用。相反,我使用了&#34; -jvm-debug&#34; &#34; activator.bat&#34;的选项项目主文件夹的命令,它工作。像这样:

C:\Projects\MyProject>activator -jvm-debug
Listening for transport dt_socket at address: 9999
[info] Loading global plugins from C:\Users\MyAccount\.sbt\0.13\plugins
[info] Loading project definition from C:\Projects\MyProject\project
[info] Set current project to MyProject (in build file:/C:/Projects/MyProject/)

然后,在激活器(sbt)内,我使用&#34;运行&#34;命令。像这样:

[MyProject] $ run

--- (Running the application, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
'force' enabled

(Server started, use Ctrl+D to stop and go back to the console...)

Running "watch" task

要从eclipse调试,右键单击该项目并选择&#34; Debug As,Debug Configurations&#34;。在Debug Configurations对话框中,右键单击&#34; Remote Java Application&#34;并选择&#34; New&#34;。将端口更改为9999并单击&#34;应用&#34;。从现在开始,您可以点击&#34; Debug&#34;连接到正在运行的应用程序。

答案 2 :(得分:4)

我发现了另一件事:

fork in run := false

fork in Test := false
“build.sbt”中的

这使您可以调试测试,而不仅仅是应用程序本身。

答案 3 :(得分:4)

使用Play framework 2.x:

在项目目录中,运行激活器命令,如

  

activator -jvm-debug 9999 run

完成此操作后,在IDE中将项目调试为远程Java应用程序,以将其与激活器进程挂钩。

完成此操作后,您就可以在任何地方打破代码。 :)

答案 4 :(得分:0)

我尝试使用Readren的解决方案但使用IntelliJ IDEA社区版(因此没有内置的Play支持)而不是Eclipse。

这基本上是记录使用新Typesafe Activator的方式(我使用的是1.3.2)。对我来说,应用程序运行并且IntelliJ调试器看起来像它正在连接但它不会打到任何断点(IntelliJ中的断点也没有刻度标记表明它们不会被击中)。

我尝试更改activator.bat文件中的DEBUG_OPTS设置以使用jdwp命令行参数的-agentlib形式,这似乎为我解决了这个问题。

rem set DEBUG_OPTS=-Xdebug -Xrunjdwp:tnsport=dt_socket,server=y,suspend=n,address=!JPDA_PORT!
set DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999

可能我应该将它放在某个地方的activatorconfig.txt中,但是花了大约4个小时试图让它工作 - 所以现在对我来说已经足够了......

我正在使用以下JVM以防万一:

java版“1.7.0_75” Java(TM)SE运行时环境(版本1.7.0_75-b13) Java HotSpot(TM)64位服务器VM(内置24.75-b04,混合模式)