2010-04-14 77 views
6

我有一個Google Web Toolkit應用程序正在部署到Google App Engine。在部署的應用程序中,我收到了一個JavaScript錯誤Uncaught TypeError: Cannot read property 'f' of null。這聽起來像Java NullPointerException的JavaScript等價物。調試在Google App Engine上部署時出現錯誤的Google Web Toolkit應用程序

問題是GWT JavaScript被混淆了,因此無法在瀏覽器中進行調試,並且我無法在託管模式下重現相同的問題,我可以使用Java調試器。我認爲我只在部署的應用程序上看到錯誤的原因是我在GAE服務器上使用的數據庫觸發的內容與我在測試和開發期間使用的測試數據庫不同。

那麼,有關最佳方式進行的任何想法?我想到了以下幾點:

  • 部署我的應用程序的非模糊版本。儘管有很多谷歌搜索,但我無法弄清楚如何使用Google Eclipse插件提供的自動部署腳本來完成此操作。有人知道嗎?
  • 下載並將我的GAE數據複製到本地服務器
  • 不知何故指出我的開發代碼使用GAE服務器而不是本地測試數據庫的數據。這似乎是最好的主意......

任何人都可以建議如何在這裏繼續?

最後,有沒有辦法在生產服務器上捕獲這些JavaScript錯誤並將它們記錄在某處?如果沒有日誌記錄,我不會知道我的用戶是否有錯誤,而這些錯誤不會發生在服務器上。 GWT.log()函數被自動從生產代碼中剝離出來...

回答

3

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)投票的錯誤,不開發版本或在單元測試中出現的(幾乎總是)由於GWT的錯誤,你已經調查了不多,由GWT論壇或問題跟蹤器下載,看看它是否是已知錯誤以及是否有解決方法。

相關問題