Есть ли способ получить доступ к состоянию GenServer?

Есть ли встроенный способ увидеть текущее состояние GenServer? Вы всегда можете реализовать простой вызов для возврата состояния, но есть ли более общий способ?

Когда я запускаю: наблюдатель.старт, я могу посмотреть на запущенные приложения и увидеть их состояние, так что это кажется возможным. Но это может быть двойное секретное колдовство Эрланга, чтобы получить это.

1 ответ

Решение

Это зависит от того, как вы собираетесь его использовать.

Если получение состояния является частью вашей бизнес-логики, тогда да - это должно быть правильно смоделировано в вашем приложении с помощью GenServer.call вернуть государство.

Если вам это нужно только с точки зрения отладки / понимания вашего приложения, вы можете использовать :sys.get_stateкак это:

iex> :sys.get_state(pid)
# some state printed

Пожалуйста, знайте об этом:sys.get_stateпримет либоpidили имя сервера (если оно зарегистрировано под одним).

Также, пожалуйста, посмотрите на этот раздел об отладке с:sys модуль в эликсире GenServer документация как то очень полезная.

Надеюсь, это поможет!

Другие вопросы по тегам