7

我有一个要部署到 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() 函数会自动从生产代码中剥离出来......

4

1 回答 1

4

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

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

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

4) 通过只保留一种排列来加快编译过程。在那里查看如何执行此操作: 如何加快 gwt 编译器的速度?

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

于 2010-04-14T20:15:07.190 回答