在Eclipse中调试Playframework

39
我刚从Netbeans转到Eclipse。在Netbeans中,我可以直接调试Playframework应用程序。但是,在Eclipse中,配置这个以便调试Web应用程序(特别是Playframework应用程序)似乎很困难。
根据Play!文档,主要启动器只能使用“Run As”eclipse命令。然后您可以使用“Debug As”中的“Connect JPDA launcher”随时启动调试会话。停止调试会话不会停止服务器。
但是,在"Eclipse Classic 3.7.0"中,“Debug As”中找不到“Connect JPDA launcher”。我搜索了JPDA(我是Java新手,不熟悉“main launcher”和JPDA),然后按照远程调试设置指南配置远程调试,但出现错误:
无法连接到远程VM。 拒绝连接。 连接被拒绝:连接
我搜索并找到一些建议,例如:
1.编辑catalina.bat并添加以下行:set JPDA_TRANSPORT = dt_socket ... set JPDA_ADDRESS = 8000和2.编辑startup.bat call“%EXECUTABLE%”jpda start%CMD_LINE_ARGS%
实际上,我不太清楚这是什么意思,而且我猜测这是为了配置Tomcat。但是,我正在使用Play!默认服务器,检查了application.conf并确保它在端口9000和8000上监听JPDA。
当然,在调试之前我已经启动了Play应用程序,我可以通过端口9000正常访问该应用程序。我正在使用Win 7,没有管理权限。
您是否有有关在Eclipse中调试Play!的详细指南?
7个回答

115

从Play 2.0版本开始,运行play eclipsify时不再生成eclipse文件夹和启动器。 运行play eclipsify后,您可以按照以下方法在Eclipse中调试项目:

  1. 在Eclipse之外的控制台中运行play debug run
  2. 在Eclipse中,右键单击您的项目,然后选择Debug As -> Debug Configurations...
  3. 右键单击Remote Java Application,然后单击New
  4. 主机应该已经设置为localhost。 将端口设置为9999play debug run命令使用的默认端口)。
  5. 单击Apply保存,然后单击Debug连接到正在运行的Play实例。

现在 Eclipse 文件夹不再生成,那么你如何从 Eclipse 运行测试呢? - Diego

31

首先,您是否使用play eclipsify YourProject命令创建了Eclipse的配置文件?(如果没有,请参阅Play框架文档获取更多信息。)

之后,您应该在项目中看到一个名为eclipse的文件夹。在其中,您应该看到Connect JDPA to YourProject.launchYourProject.launchTest YourProject.launch等命令。

右键单击YourProject.launch并从弹出菜单中选择Run As --> YourProject即可启动您的应用程序。当应用程序正在运行时,右键单击Connect JDPA to YourProject.launch,然后从弹出菜单中选择Debug As --> Connect JDPA to YourProject.launch即可启动应用程序的调试会话。


2
有时这会造成麻烦,因为端口已被使用。请参见http://play.lighthouseapp.com/projects/57987/tickets/991-uncomfortable-eclipse-launcher。 - niels
另外,谈到第一步,你可以选择从命令行启动应用程序,而不是从Eclipse内部启动,例如 play test(因为在DEV模式下调试始终是启用的)。这样它总是使用您现有的配置,否则您需要修改生成的'<app-name>.launch'文件以适应不同的端口和/或数据库。 - ryenus

7

Play 2.1-RC2 : 运行与Eclipse同步的Play! 应用

为了使项目兼容Eclipse,需要在项目文件夹中执行命令“>play eclipse”。现在您可以将其作为现有项目添加到Eclipse中。

然后,要运行它,您必须先在项目文件夹中运行启动Play服务器的命令,即“play”命令。

这将激活Play服务器并识别项目中的应用,即[appname]$。现在,您只需要输入命令“run”,即可在localhost:9000上看到您的应用程序运行,或者任何您指定的端口。

调试模式: 要以类似的方式运行此操作,您需要首先执行“play”命令,然后是 [appname]$ "play debug run" 命令,这将默认使用端口9999,因此当您在浏览器中访问localhost:9000,在eclipse中选择文件 -> Debug As -> Debug configuration.. -> New Remote Java Application ->连接并指定端口9999进行调试。


4
使用激活器,您需要执行activator -jvm-debug <端口号> ~run命令。

请问您能否提供更多细节?在使用9999端口运行此命令后,我收到了以下消息:“正在侦听地址为9999的传输dt_socket”,但我无法使用它连接Eclipse调试器。我收到“无法连接到远程VM。连接被拒绝。连接被拒绝”错误提示。谢谢! - Ankit Jain
我不再安装Eclipse,所以无法帮助你。你可以尝试这个命令:jdb -attach <port_no>,看看是否连接成功?如果连接成功,但Eclipse无法连接,则请确保您按照https://dev59.com/b2w05IYBdhLWcg3wiyfg#10257101中的其余步骤操作。 - 0fnt

4
我猜你们大多数都是使用 Typesafe Activator 运行 Play 框架。如果是这样,这可能会对你有所帮助,
  1. activator -jvm-debug ~run

    例如:activator -jvm-debug 9999 ~run

(然后它将在 9000 端口运行的应用程序中启动 9999 端口的调试器。)

  1. 现在转到 Eclipse,在要调试的项目名称上单击右键,选择Debug As -> Debug configuration.. -> (选择)Remote Java Application -> 新建 (左上角带有微小加号的图标) -> 连接指定端口 9999 并调试。

我已经按照你说的步骤进行了调试,但仍然无法从Eclipse中进行调试。请帮帮我... - Keyur Ardeshana
它应该可以工作。你的控制台是否显示9999端口已激活?你有没有固定任何调试行?请用你所遵循的步骤写信给我,或者通过电子邮件发送屏幕截图给我。 - Sagiruddin Mondal
同Keyur一样...这真是令人发狂。我可以看到它正在连接,我可以添加断点,甚至放置愚蠢的日志语句,我可以看到输出,但它只是跳过任何断点... - michael.schuett

2
截至Play 2.1.2版本,当运行play debug run时,我遇到了“地址正在使用”的错误。
解决方法是编辑play-2.1.2目录中的play.bat文件,并更改以下两行内容:
:setDebug
set JPDA_PORT=9999

to

:setDebug
set JPDA_PORT=8551

然后在Eclipse中,选择“Debug Configurations”,找到“Remote Java Application”,新建一个。然后将端口设置为8551。现在你可以使用它来开始玩了。

play debug run

然后在Eclipse中使用您创建的调试配置开始调试。



1
如果您在项目文件夹上运行“play eclipsify”,它将创建两个运行配置。查看运行配置详细信息,您应该检查以下行(或类似内容)是否在“VM参数”中:
-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
-Dplay.debug=yes
-Dplay.id=test -Dapplication.path="${project_loc:NMKServer}"
-Djava.endorsed.dirs="c:\Java\play-1.2.2/framework/endorsed"
-javaagent:"c:\Java\play-1.2.2/framework/play-1.2.2.jar"

在这里,您可以配置调试端口。使用此配置,我可以使用您提供的指令附加到进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接