3

私は現在、いくつかのアクターベースの Scala アプリケーションを保守していますが、常に尋ねている質問の 1 つは、誰がそのメッセージを送信したのかということです。

たとえば、ログで見つけた恐ろしいメッセージを出力するコードを見つけます。

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

そして、何が原因なのかを突き止めたいと思っています。アクターを使用していなければ、Ctrl+Alt+H(少なくとも Eclipse では) ヒットして、誰がこの「メソッド」を「呼び出した」か (そして、誰がそれを呼び出し、誰がそれを呼び出した) を見つけることができました。アクターの場合、! ReportFailedUpdates(どのアクターがこのメッセージを送信したかを検索し、次にそのアクターが反応したメッセージの送信者を検索します(通常は結果を紙に書きます)。これには 2 つの欠点があります。

  • 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 に答える