3

我目前正在维护几个基于actor的Scala应用程序,我发现自己一直在问的一个问题是谁发送了该消息?

例如,我找到了一段代码,它打印了我在日志中发现的可怕消息:

case ReportFailedUpdates(stuff) =>
  log("The horror! The horror! " + stuff)
  dieHorribly()

我想找出可能是什么原因。如果我不使用演员,我可以点击Ctrl+Alt+H(至少在 Eclipse 中)并找出谁“调用”了这个“方法”(以及谁调用了那个,谁调用了那个)。对于演员,我发现自己在! ReportFailedUpdates(寻找哪些演员发送此消息,然后搜索演员正在回应的消息的发件人,等等(并且通常在纸上绘制结果)。这有两个缺点:

  • 它更慢,因为 Eclipse 正在对(可能很多)项目进行文本搜索,我不得不记下一些东西
  • 它不一定会找到所有出现的情况,因为这可能是用 发送的!?,或者有人在!和之间放置了两个空格ReportFailedUpdates,或,或,或...。

喜欢的是一些工具支持,它可以让我找出消息可能来自哪里——大致相当于非基于角色的代码的调用层次结构。

有什么工具可以做到吗?这是我还没有发现的 ScalaIDE for Eclipse 的一个特性吗?如果我使用 IntelliJ,我的生活会更好吗?

更新

我的例子可能具有误导性。这不仅仅是要弄清楚当一切都崩溃时出了什么问题——当我拿起一个新系统并需要弄清楚它是如何工作的时候,我也发现自己经常这样做。似乎还没有工具可以做到这一点。我想我必须自己考虑一下如何开始静态提取(并且可能是可视化)消息流图......

4

1 回答 1

0

嗯,这是一个非常强烈的愿望,如果有人写它,我会印象深刻,但我还没有看到这样的东西。

追踪它会非常困难,因为没有“堆栈”可以追踪。不过,我很好奇你为什么不这样做:

case ReportFailedUpdates(stuff) =>
    log("The horror! The horror! %s (sent by %s)".format(stuff, sender))
    dieHorribly()

这至少会给你链中的当前链接。

同样——我是一个 Vim 人,所以请原谅我的无知——你的 IDE 没有更好的搜索机制,比如正则表达式吗?

于 2012-01-19T15:26:54.707 回答