2010-04-14 2 views
6

У меня есть приложение Google Web Toolkit, которое я развертываю в Google App Engine. В развернутом приложении, я получаю ошибку JavaScript Uncaught TypeError: Cannot read property 'f' of null. Это похоже на эквивалент JavaScript исключения Java NullPointerException.Отладка приложения Google Web Toolkit с ошибкой при развертывании в Google App Engine

Проблема в том, что JavaScript GWT запутан, поэтому невозможно отладить в браузере, и я не могу воспроизвести ту же проблему в режиме размещения, где я мог бы использовать отладчик Java. Я думаю, что причина, по которой я вижу ошибку в развернутом приложении, заключается в том, что база данных, которую я использую на сервере GAE, запускает нечто иное, чем тестовая база данных, которую я использую во время тестирования и разработки.

Итак, какие-либо идеи о лучшем способе продолжения? Я подумал о следующих вещах:

  • Разверните не оскорбительную версию моего приложения. Несмотря на то, что Google Gogling не работает, я не могу понять, как это сделать, используя сценарий автоматического развертывания, поставляемый с плагином 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) Ошибки Javascript, которые не отображаются в версии разработки или в модульных тестах (почти всегда) из-за ошибки в GWT, после того, как вы немного исследовали , зайдите на форум GWT или выйдите из трекера и узнайте, является ли это известной ошибкой и существует ли обходной путь.