如何调试Google App Engine servlet?

时间:2012-02-29 17:53:29

标签: java eclipse debugging google-app-engine

我是App Engine的新手,我正在尝试用Java编写一些示例Web应用程序。我还没弄清楚如何在eclipse中调试java web应用程序项目。

当我启动调试配置时,启动了部分SDK的jetty服务器,我可以从浏览器访问我的页面。但是我的servlet中没有任何断点被击中。我错过了一些调试配置吗?

3 个答案:

答案 0 :(得分:4)

假设您已经安装了Google Plugin for Eclipse,那应该是一个简单的问题:

Run menu -> Debug As -> Web Application

这当然在Eclipse调试器内的Web服务器中运行您的应用程序。有关详细信息,请参阅Running the Project

答案 1 :(得分:1)

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

答案 2 :(得分:1)

对于任何尝试使用Eclipse调试Google App Engine但不使用GAE Eclipse插件的人,我在这里写了详细的答案: Dev workflow for app engine + modules + maven

如上所述,这是答案的副本:


  

我使用的是类似的结构,但差别很小。最高级别   目录有战争和耳朵,然后他们包含他们的具体   pom.xml中。我使用Eclipse进行调试,我可以进行热部署   “大多数时候”我并没有使用Eclipse插件,我(

     

明白)是你想要的。目录结构

.
|-- pom.xml
|-- README.md
|-- my-ear
|   |-- devpid
|   |-- pom.xml
|   `-- src
|       `-- main
|           `-- application
|               `-- META-INF
`-- my-war
    |-- build
    |   `-- classes
    |       |-- main
    |       |   |-- java
    |       |   `-- webapp
    |       `-- test
    |           `-- java
    |-- pom.xml
    `-- src
        |-- main
        |   |-- java
        |   |   `-- com
        |   `-- webapp
        |       |-- css
        |       |-- favicon.ico
        |       |-- index.html
        |       |-- js
        |       |-- test.html
        |       `-- WEB-INF
        `-- test
            `-- java
     

工具

     
      
  • 没有Google App Engine插件(或SDK)的Eclipse Luna
  •   
  • Maven 3.2.1
  •   
  • Google App Engine SDK 1.9.6
  •   
     

开发工作流程

     
      
  1. 如果您已经拥有源代码,请将其保存在其他位置并使用mvn appengine命令生成骨架。
  2.   
  3. 使用maven和terminal以及mvn appengine:devserver命令,使用简单的Hello World运行第一个剪切。
  4.   
  5. 完成后,生成eclipse项目。
  6.   
  7. 将eclipse项目导入为Maven项目。它将通过Maven看到罐子。我不会在Luna之前根据需要写出这个答案   调整太多了。在Luna中,这会自动生效。
  8.   
  9. 上面的步骤将创建三个项目,top level,ear和war,每个项目都有pom.xml - 没关系。
  10.   
  11. 在eclipse中,将输出目录提供为war / target目录。这是使热部署成为可能的步骤。
  12.   
  13. 在maven ear / pom.xml中,将xArgs添加到appengine插件以便在调试模式下运行。

    <plugin>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>${appengine.target.version}</version>
        <configuration>
            <jvmFlags>
            <jvmFlag>-Xdebug</jvmFlag>
                <jvmFlag>-Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n</jvmFlag>
            </jvmFlags>
            <disableUpdateCheck>true</disableUpdateCheck>
        </configuration>
    </plugin>
    
  14.   
  15. 注意suspend = n。

  16.   
  17. 使用来自ear目录的mvn appengine:devserver 从eclipse外部运行app引擎。我用这个命令:   `mvn appengine:devserver&gt; 〜/ .logs / .appengine.devserver.logs&amp;回声$!      
        

    devpid`让我们称之为终端1.

      
  18.   
  19. 此方法的一个优点是Eclipse不会捕获您的控制台,因此您可以自由使用您选择的工具来查看它,例如   multitail等我用这个简单的tail命令:tail -f ~/.logs/.appengine.devserver.logs | sed 's/INFO/^[[0;34m&^[[0m/g;s/ERROR/^[[0;31m&^[[0m/g;s/WARN\|WARNING/^[[0;35m&^[[0m/g;s/SEVERE\|FATAL/^[[0;31;47m&^[[0m/g'   以上是难以打字的命令。 ^ [的每个实例   实际上是Ctrl + V Esc - 值得输入一次。但   这当然是主观的,取决于你。
  20.   
  21. 在Eclipse中,在Remote Java Application下为项目创建调试配置文件 - 选择war项目和套接字附加选项。
  22.   

此步骤可在互联网上的许多地方使用,但这是一张图片Debug Config, Remote Application, War Socket Attach

  
      
  1. 在war目录中打开另一个终端,即终端2并保持打开状态,以便在需要时运行mvn compile install
  2.   
  3. 你很高兴。您应该能够通过在适当的位置粘贴源代码来集成它们。你也应该能够   使用标准调试技术。 Eclipse将在右侧编译   location和devserver会检测到它。如果Eclipse抛出一个   警告,忽略它。
  4.   
  5. 大部分时间都可以使用。有时,您会保存一些会破坏整个项目编译的内容,或更改函数名称   从预编译的类调用或只是更改web.xml   在启动时加载。当然,热部署不起作用。
  6.   
  7. 在这种情况下,请在eclipse中停止删除调试,完成任务,从终端2运行mvn compile install。   Devserver将自动检测。
  8.   
  9. 大多数情况下,我几乎不需要触摸终端1中运行的尾部.Devserver不需要重启。
  10.   
  11. 除非我更改web.xml或重构,否则我不需要从外部运行mvn compile install
  12.         
         

    我给出窗口列表(Eclipse,终端1和终端2)的原因只是为了表明Alt + Tab实际上比   从日食中移位+ F7。这是主观的,当然还有   你。