我现在正在维护一些基于actor的Scala应用程序,我发现自己一直在问的一个问题是谁发送了这条消息?
例如,我找到了一段代码,用于打印我在日志中找到的可怕消息:
case ReportFailedUpdates(stuff) =>
log("The horror! The horror! " + stuff)
dieHorribly()
我想知道可能是什么原因。如果我没有使用演员,我可以点击Ctrl+Alt+H
(至少在Eclipse中)并找出谁叫'这个'方法'(谁打电话给谁,谁叫那个 )。对于演员,我发现自己正在搜索! ReportFailedUpdates(
以查找哪些演员发送此消息,然后搜索 演员正在做出反应的消息的发件人,等 (通常将结果绘制在纸上)。这有两个缺点:
!?
发送的,或者有人在!
和ReportFailedUpdates
之间放置了两个空格,或者,或者,或者.... 我喜欢的是一些工具支持,可以让我找出消息可能来自哪里 - 大致相当于非基于actor的代码的调用层次结构。
有没有工具可以做到这一点?这是我刚才没有发现的ScalaIDE for Eclipse的一个特性吗?如果我使用IntelliJ,我的生活会更好吗?
更新
我的例子可能会产生误导。这不只是弄清楚当它全部崩溃时出了什么问题 - 当我拿起一个新系统并且需要弄清楚它是如何工作的时候我也发现自己做了很多。似乎还没有一个工具可以做到这一点。猜猜我必须自己想一想如何开始静态提取(也许可视化)消息流图...
答案 0 :(得分:0)
嗯,这是非常强烈的愿望,如果有人写这篇文章我会留下深刻的印象,但我还没有看到类似的东西。
跟踪它将非常困难,因为没有“堆栈”可以跟踪。我很好奇为什么你不这样做,但是:
case ReportFailedUpdates(stuff) =>
log("The horror! The horror! %s (sent by %s)".format(stuff, sender))
dieHorribly()
这至少会为您提供链中的当前链接。
同样 - 我是一个Vim家伙,请原谅我的无知 - 你的IDE没有更好的搜索机制,比如Regexes吗?