2010-04-14 13 views
6

Tengo una aplicación Google Web Toolkit que estoy implementando en Google App Engine. En la aplicación desplegada, recibo un error de JavaScript Uncaught TypeError: Cannot read property 'f' of null. Esto suena como el equivalente de JavaScript de una Java NullPointerException.Depuración de una aplicación Google Web Toolkit que tiene un error cuando se implementa en Google App Engine

El problema es que el JavaScript GWT está ofuscado, por lo que es imposible depurarlo en el navegador y no puedo reproducir el mismo problema en el modo alojado donde podría usar el depurador Java. Creo que la razón por la que solo veo el error en la aplicación implementada es porque la base de datos que estoy usando en el servidor GAE está activando algo de manera diferente a la base de datos de prueba que estoy usando durante las pruebas y el desarrollo.

¿Alguna idea sobre la mejor manera de proceder? He pensado en las siguientes cosas:

  • Implementar una versión no obstruida de mi aplicación. A pesar de una gran cantidad de Google, no puedo encontrar la manera de hacerlo mediante la secuencia de comandos de implementación automática proporcionada con el complemento de Google Eclipse. ¿Alguien sabe?
  • Descargue y copie mis datos de GAE en el servidor local
  • Señale de alguna manera mi código de desarrollo para usar el servidor de GAE para los datos en lugar de la base de datos de prueba local. Esta parece ser la mejor idea ...

¿Alguien puede sugerir cómo proceder aquí?

Finalmente, ¿hay alguna forma de detectar estos errores de JavaScript en el servidor de producción y registrarlos en algún lugar? Sin registrar, no tendré que saber si mis usuarios tienen errores que no ocurren en el servidor. La función GWT.log() se elimina automáticamente del código de producción ...

Respuesta

3

1) Si puede replicar localmente el estado necesario de su base de datos GAE, ejecute la versión compilada de JavaScript en su máquina local. Es casi seguro que dará el mismo error, pero es mucho menos costoso que una implementación completa de App Engine. Haga esto compilando su aplicación con el compilador GWT, luego, comience normalmente, luego apunte su navegador a la dirección especificada sin la parte ?gwt.codesvr=127.0.0.1:9997.

2) Use -style PRETTY o -style DETAILED con el compilador GWT para obtener un javascript más agradable. Si compila localmente con este distintivo una vez, la implementación en App Engine (con el plugin de Eclipse) enviará la misma versión no ofuscada.

3) Instrumente su código (Window.alert() funciona bien) para averiguar exactamente dónde ocurre el error. Esto es especialmente útil para encontrar dónde la ejecución de javascript se desvía de la ejecución del modo alojado.

4) Agilice su proceso de compilación manteniendo una sola permutación. Vea cómo hacer esto allí: How do I speed up the gwt compiler?

5) Los errores de Javascript que no aparecen en la versión de desarrollo o en pruebas unitarias son (casi siempre) debido a un error en GWT, después de haber investigado un poco , visite el foro de GWT o el rastreador de problemas y vea si se trata de un error conocido y si existe o no una solución alternativa.