2010-04-14 13 views
6

J'ai une application Google Web Toolkit que je déploie sur Google App Engine. Dans l'application déployée, j'obtiens une erreur JavaScript Uncaught TypeError: Cannot read property 'f' of null. Cela ressemble à l'équivalent JavaScript d'une exception Java NullPointerException. Le problème est que le JavaScript GWT est obfusqué, il est donc impossible de déboguer dans le navigateur et je ne peux pas reproduire le même problème en mode hébergé où je pourrais utiliser le débogueur Java. Je pense que la raison pour laquelle je ne vois que l'erreur sur l'application déployée est que la base de données que j'utilise sur le serveur GAE déclenche quelque chose de différent de la base de données de test que j'utilise pendant les tests et le développement.Débogage d'une application Google Web Toolkit présentant une erreur lors du déploiement sur Google App Engine

Alors, des idées sur la meilleure façon de procéder? J'ai pensé aux choses suivantes:

  • Déployez une version non obsolète de mon application. Malgré beaucoup de Google, je ne peux pas comprendre comment faire cela en utilisant le script de déploiement automatique fourni avec le plugin Google Eclipse. Est-ce que quelqu'un sait?
  • Télécharger et copier mes données GAE sur le serveur local
  • D'une certaine manière, mon code de développement doit utiliser le serveur GAE pour les données au lieu de la base de données de test locale. Cela semble être la meilleure idée ...

Quelqu'un peut-il suggérer comment procéder ici?

Enfin, existe-t-il un moyen d'intercepter ces erreurs JavaScript sur le serveur de production et de les enregistrer quelque part? Sans journalisation, je n'aurai pas de toute façon à savoir si mes utilisateurs ont des erreurs qui ne se produisent pas sur le serveur. La fonction GWT.log() est automatiquement supprimée du code de production ...

Répondre

3

1) Si vous pouvez répliquer localement l'état requis de votre base de données GAE, exécutez la version compilée javascript sur votre machine locale. Cela donnera presque certainement la même erreur, mais est beaucoup moins cher qu'un déploiement AppEngine complet. Pour ce faire, compilez votre application avec le compilateur GWT, puis démarrez-le normalement, puis pointez votre navigateur vers l'adresse spécifiée sans la pièce ?gwt.codesvr=127.0.0.1:9997.

2) Utilisez le -style PRETTY ou le -style DETAILED avec le compilateur GWT pour obtenir un javascript plus agréable. Si vous compilez une fois avec ce drapeau localement, le déploiement sur AppEngine (avec le plugin Eclipse) enverra la même version non-obfusquée.

3) Instrument votre code (Window.alert() fonctionne très bien) pour comprendre exactement où l'erreur se produit. Ceci est particulièrement utile pour trouver où l'exécution javascript s'écarte de l'exécution du mode hébergé.

4) Accélérez votre processus de compilation en ne gardant qu'une seule permutation. Voir comment faire ceci: How do I speed up the gwt compiler?

5) Les erreurs de Javascript qui n'apparaissent pas dans la version de développement ou dans les tests unitaires sont (presque toujours) dues à un bogue dans GWT, après que vous ayez examiné un peu , passez par le forum GWT ou par l'outil de suivi des problèmes et voyez s'il s'agit d'un bug connu et s'il existe une solution de contournement.

Questions connexes