我目前正在维护几个基于actor的Scala应用程序,我发现自己一直在问的一个问题是谁发送了该消息?
例如,我找到了一段代码,它打印了我在日志中发现的可怕消息:
case ReportFailedUpdates(stuff) =>
log("The horror! The horror! " + stuff)
dieHorribly()
我想找出可能是什么原因。如果我不使用演员,我可以点击Ctrl+Alt+H
(至少在 Eclipse 中)并找出谁“调用”了这个“方法”(以及谁调用了那个,谁调用了那个)。对于演员,我发现自己在! ReportFailedUpdates(
寻找哪些演员发送此消息,然后搜索该演员正在回应的消息的发件人,等等(并且通常在纸上绘制结果)。这有两个缺点:
- 它更慢,因为 Eclipse 正在对(可能很多)项目进行文本搜索,我不得不记下一些东西
- 它不一定会找到所有出现的情况,因为这可能是用 发送的
!?
,或者有人在!
和之间放置了两个空格ReportFailedUpdates
,或,或,或...。
我喜欢的是一些工具支持,它可以让我找出消息可能来自哪里——大致相当于非基于角色的代码的调用层次结构。
有什么工具可以做到吗?这是我还没有发现的 ScalaIDE for Eclipse 的一个特性吗?如果我使用 IntelliJ,我的生活会更好吗?
更新
我的例子可能具有误导性。这不仅仅是要弄清楚当一切都崩溃时出了什么问题——当我拿起一个新系统并需要弄清楚它是如何工作的时候,我也发现自己经常这样做。似乎还没有工具可以做到这一点。我想我必须自己考虑一下如何开始静态提取(并且可能是可视化)消息流图......