В настоящее время я поддерживаю несколько приложений Scala на основе актеров, и один вопрос, который я постоянно задаю себе, - Кто отправляет это сообщение?
Например, я нахожу фрагмент кода, который печатает страшное сообщение, которое я нашел в журналах:
case ReportFailedUpdates(stuff) =>
log("The horror! The horror! " + stuff)
dieHorribly()
и я хочу выяснить, в чем может быть причина. Если бы я не использовал актеров, я мог бы нажать Ctrl+Alt+H
(по крайней мере, в Eclipse) и выяснить, кто «вызвал» этот «метод» (и кто назвал это, а кто назвал тот ). С актерами я нахожу себя в поиске ! ReportFailedUpdates(
, чтобы найти, какие актеры отправляют это сообщение, а затем в поиске отправителей сообщения , на которое реагировал актер, и т. Д. (и обычно рисование результат на бумаге). Это имеет два недостатка:
- Это медленнее, так как Eclipse выполняет текстовый поиск по (потенциально многим) проектам, и мне приходится записывать вещи вниз
- Не обязательно найти все вхождения, поскольку, возможно, это было отправлено с
!?
, или, может быть, кто-то поставил два пробела между !
и ReportFailedUpdates
, или, или, или ....
Что бы я любил - это некоторая инструментальная поддержка, которая позволяет мне выяснить, откуда могло прийти сообщение - примерно эквивалент иерархии вызовов для кода, не основанного на акторе.
Есть ли инструменты, которые это делают? Это особенность ScalaIDE для Eclipse, которую я просто не обнаружил? Если я буду использовать IntelliJ, станет ли моя жизнь лучше?
Обновление
Мой пример мог вводить в заблуждение. Речь идет не только о том, чтобы выяснить, что пошло не так, когда все это рухнуло - я также обнаружил, что часто делаю это, когда выбираю новую систему и мне нужно выяснить, как она работает. Похоже, еще нет инструмента для этого. Думаю, мне нужно подумать о том, как вы можете начать статически извлекать (и, возможно, визуализировать) граф потока сообщений ...