GWT生产崩溃

时间:2013-04-15 10:21:34

标签: javascript debugging gwt

我正在开发一个GWT-GAE Java交易应用程序,客户端在服务器上下订单,然后通过客户端(通过AppEngine Channel)通知更新。我的问题是我遇到了不规则的客户端崩溃 - 交易后5到10分钟,客户端可能会崩溃(在Chrome中我看到这个页面:chrome:// crash /)。我在生产中测试了这个,最多10个同时交易者(在不同的机器上)交易30分钟,我通常会遇到4或5个独立的客户端崩溃。由于连接数量减少或交易活动减少,我看不到崩溃。

我认为问题可能是ConcurrentModificationExceptions,所以我尝试了1)使用延迟命令和Scheduler.get()。scheduleDeferred,以及2)实现Message队列,但这些都没有帮助。

我的问题是 - 如何调试?在开发中,我在出现内存错误之前可以进行的同时连接数量(2或3)受到限制,因此我无法复制我的问题。有没有办法看到导致这些崩溃的生产中抛出了哪种异常?

我查看了GWT logging mechanism - 我是否可以在服务器上记录标签崩溃?

谢谢!

更新

我已经设置了gwt-log,但是当我重现我的客户端崩溃时,它似乎没有记录它。它记录了各种其他信息,但客户端崩溃时没有错误。在客户端,我有一个围绕频道消息的try-catch:

try {
  SerializationStreamReader reader = ((SerializationStreamFactory)rpcService).createStreamReader(encodedData);
  Message message = (Message) reader.readObject();
  Log.info(name + ": " + message.toString());
  processMessage(message);
} catch (Exception e) {
  Log.fatal(name + ": error encoding " + encodedData);
}

当客户端崩溃时,我是否应该在服务器日志中看到某些内容?

2 个答案:

答案 0 :(得分:0)

是的,您可以使用Remote_Logging

还有https://code.google.com/p/gwt-log/

为您提供了更多选项,例如

答案 1 :(得分:0)

使用dev-mode您很快就会遇到大型应用程序或使用大量jsni的应用程序的内存和性能问题。这是由于开发模式的体系结构需要IDE和浏览器插件之间复杂的通信过程,以及JVM和JS之间频繁的执行上下文切换。

要调试复杂的东西,最好使用super-dev mode,它只会在浏览器中执行javascript,并提供一种很好的方式(source-maps)来调试浏览器中的应用程序,但是使用你的java源代码。

请注意,超级开发模式设置有点复杂,特别是当您需要与后端通信时,重新加载过程有点慢,并且请注意您将错过IDE java调试控制台。但值得一试。