如何调试Google App Engine的servlets?

6

我是App Engine的新手,正在尝试使用Java编写一些示例Web应用程序。我无法弄清楚如何在Eclipse中调试Java Web应用程序项目。

当我启动调试配置时,SDK的Jetty服务器启动,并且我可以从浏览器访问我的页面。但是我的servlet中没有任何断点被命中。我是否缺少某些调试配置?

3个回答

4
假设您已经安装了Google Plugin for Eclipse,那么只需要简单地执行以下步骤:
Run menu -> Debug As -> Web Application

当然,这会在Eclipse调试器内的Web服务器中运行您的应用程序。有关详细信息,请参见 运行项目


1

对于那些想在Eclipse中调试Google App Engine但不使用GAE Eclipse插件的人,我在这里写了一个详细的答案: 应用引擎+模块+maven的开发工作流程

如所请求,这里是答案的副本:


我正在使用类似的结构,只有一点不同。顶级目录有war和ear,然后它们包含它们特定的pom.xml。我使用Eclipse进行调试,大多数时间都能够进行热部署,并且我没有使用Eclipse插件(这是您想要的)。目录结构:工具:Eclipse Luna without Google App Engine Plugin (or SDK)、Maven 3.2.1、Google App Engine SDK 1.9.6。开发流程:如果您已经有源代码,请将其放在其他地方,并使用mvn appengine命令生成骨架。使用仅maven和终端以及mvn appengine:devserver命令运行第一个简单的Hello World。完成后,生成eclipse项目。将eclipse项目作为Maven项目导入。它将通过Maven看到jar文件。这在Luna之前我不会写这个答案,因为它需要太多的调整。在Luna中,这自动工作。上面的步骤将创建三个项目,每个项目都有pom.xml-没问题。在eclipse中,将输出目录提供为war/target目录。这是使热部署成为可能的步骤。在maven ear/pom.xml中,添加xArgs到appengine插件以以调试模式运行。注意suspend=n。从ear目录外部运行应用程序引擎,使用mvn appengine:devserver命令。我使用这个命令:`mvn appengine:devserver > ~/.logs/.appengine.devserver.logs & echo $! devpid` 让我们称之为终端1。此方法的一个优点是您的控制台未被Eclipse捕获,因此您可以自由使用您选择的工具来查看它,例如multitail等。在Eclipse中,为您的项目创建调试配置文件,在远程Java应用程序下选择war项目和套接字附加选项。
这个步骤在互联网上的许多地方都可以找到,但是这里仍然有一张图片 Debug Config, Remote Application, War Socket Attach
  1. 打开另一个终端,即war目录中的Terminal 2,并保持打开状态,以便在需要时运行mvn compile install
  2. 您可以开始集成源代码,只需将其粘贴到正确的位置即可。您还可以使用标准的调试技术。Eclipse将在正确的位置进行编译,devserver将正确检测到它。如果Eclipse出现警告,请忽略它。
  3. 这通常有效。有时,您保存了某些内容,导致整个项目的编译出现错误,或者更改了从预编译类中调用的函数名称,或者仅更改了在启动时加载的web.xml。当然,此时热部署将无法正常工作。
  4. 在这种情况下,停止Eclipse内的远程调试,完成任务后从Terminal 2运行mvn compile install。Devserver将自动检测。
  5. 大多数情况下,我几乎不需要触及在Terminal 1中运行的尾部。Devserver不需要重新启动。
  6. 除非我正在更改web.xml或重构,否则我不需要从外部运行mvn compile install

我给出窗口列表(Eclipse、Terminal 1和Terminal 2)的原因只是为了说明Alt+Tab实际上比在Eclipse内部使用Shift+F7更快。这是主观的,当然取决于您自己。


我猜测那些给我点踩的人认为我的回答与问题要求的“不使用Eclipse”有关。我已经修改了我的回答的第一行来解决这个问题。回答是关于使用Eclipse调试GAE servlet,而不使用GAE Eclipse插件,并且是相关的。 - PoojaC20
1
远程调试部分(步骤7和11)正是使断点起作用所需的。谁曾经给这个答案点过反对,应该重新阅读一下它,因为它回答了这个问题。 - Sebastian S

1
请检查您在断点视图中是否选择了“跳过所有断点”选项。

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