Stackless Scala播放框架运行时错误

时间:2015-03-14 17:44:58

标签: scala akka

我得到了这个可爱的错误,它在play的日志文件中没有与之关联的堆栈跟踪(也没有在控制台中)。

[ERROR] [03/14/2015 19:36:46.713] [play-akka.actor.default-dispatcher-7] [ActorSystem(play)] Uncaught error from thread [play-akka.actor.default-dispatcher-7] (scala.runtime.NonLocalReturnControl)
[error] a.a.ActorSystemImpl - Uncaught error from thread [play-akka.actor.default-dispatcher-7]
scala.runtime.NonLocalReturnControl: null

这是否代表了一个崩溃的承诺/未来,但除了akka的调度员之外,没有任何线程等待它了?如何在不附加调试器会话的情况下跟踪代码中的错误?

附加调试器,似乎在Future return组合中使用map会导致NonLocalReturnControl错误。奇怪但不幸的是,在我的情况下,堆栈跟踪不会传播到控制台/日志。创建NonLocalReturnControl时的堆栈可以在调试器中看到,但akka / play以某种方式不提供它。

1 个答案:

答案 0 :(得分:3)

唉,默认情况下会抑制此类错误的堆栈跟踪。结果令人惊讶的是,scala通过内部抛出和捕获此异常类型在内部实现函数返回值传播(至少在Scala 2.11之前)。因此特别压制......艰难的运气。

在将来使用return时会出现同样的异常,这显然是一个错误,但内部架构使用这个被抑制的异常,使调试这个特殊情况,好吧,糟透了。如果出现此错误,请检查您是否在异步代码中使用return,并避免尽可能多地使用return,以便在异步时将不太可能出现在代码中。

相关问题