【问题标题】:Debugging a Google Web Toolkit application that has an error when deployed on Google App Engine调试在 Google App Engine 上部署时出错的 Google Web Toolkit 应用程序
【发布时间】:2011-02-08 02:10:55
【问题描述】:

我有一个要部署到 Google App Engine 的 Google Web Toolkit 应用程序。在部署的应用程序中,我收到一个 JavaScript 错误 Uncaught TypeError: Cannot read property 'f' of null。这听起来像是 Java NullPointerException 的 JavaScript 等价物。

问题在于 GWT JavaScript 被混淆了,因此无法在浏览器中进行调试,并且我无法在可以使用 Java 调试器的托管模式下重现相同的问题。我认为我只在部署的应用程序上看到错误的原因是我在 GAE 服务器上使用的数据库触发的东西与我在测试和开发期间使用的测试数据库不同。

那么,有什么关于最佳方式的想法吗?我想到了以下几点:

  • 部署我的应用程序的非混淆版本。尽管谷歌搜索很多,但我不知道如何使用 Google Eclipse 插件提供的自动部署脚本来做到这一点。有人知道吗?
  • 下载我的 GAE 数据并将其复制到本地服务器
  • 不知何故,我的开发代码使用 GAE 服务器而不是本地测试数据库来获取数据。这似乎是最好的主意...

任何人都可以建议如何在这里进行吗?

最后,有没有办法在生产服务器上捕获这些 JavaScript 错误并将它们记录在某个地方?如果没有日志记录,我无论如何都无法知道我的用户是否遇到了服务器上没有发生的错误。 GWT.log() 函数会自动从生产代码中剥离出来...

【问题讨论】:

    标签: debugging google-app-engine gwt google-eclipse-plugin


    【解决方案1】:

    1) 如果您可以在本地复制所需的 GAE 数据库状态,则在本地机器上运行 javascript 编译版本。这几乎肯定会产生相同的错误,但比完整的 AppEngine 部署要便宜得多。为此,请使用 GWT 编译器编译您的应用程序,然后正常启动它,然后将您的浏览器指向不带 ?gwt.codesvr=127.0.0.1:9997 部分的指定地址。

    2) 将-style PRETTY-style DETAILED 与GWT 编译器一起使用以获得更好的javascript。如果您使用此标志在本地编译一次,那么部署到 AppEngine(使用 Eclipse 插件)将发送相同的非混淆版本。

    3) 检测您的代码(Window.alert() 工作正常)以确定错误发生的确切位置。这对于查找 javascript 执行偏离托管模式执行的位置特别有用。

    4) 通过只保留一个排列来加快编译过程。看看如何在那里做到这一点: How do I speed up the gwt compiler?

    5) 没有出现在开发版本或单元测试中的 Javascript 错误(几乎总是)是由于 GWT 中的错误,在您进行了一些调查之后,请访问 GWT 论坛或问题跟踪器,然后看看它是否是一个已知的错误以及是否有解决方法。

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 2017-11-27
      • 2011-07-11
      • 2012-05-13
      • 2019-04-22
      • 2020-03-27
      • 2017-03-31
      • 2019-05-18
      • 1970-01-01
      相关资源
      最近更新 更多