【问题标题】:Is there a way to access the state of a GenServer?有没有办法访问 GenServer 的状态?
【发布时间】:2018-08-18 02:24:41
【问题描述】:

是否有内置方法可以查看 GenServer 的当前状态?你总是可以实现一个简单的调用来返回状态,但是有没有更通用的方法呢?

当我运行 :observer.start 时,我可以查看正在运行的应用程序并查看它们的状态,所以这似乎是可能的。但它可能正在做一些双重秘密的 Erlang 巫术来实现这一点。

【问题讨论】:

    标签: erlang elixir erlang-otp


    【解决方案1】:

    这取决于你将如何使用它。

    如果获取状态是您的业务逻辑的一部分,那么是的 - 这应该在您的应用程序中正确建模,并使用 GenServer.call 返回状态。

    如果您仅在应用程序的调试/洞察方面需要此功能,您可以像这样使用:sys.get_state

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

    请注意:sys.get_state 将接受pid 或服务器的名称(如果它注册在一个下)。

    另外,请查看 Elixir 的 GenServer 文档中的 this section about debugging with :sys module,因为它非常有用。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      相关资源
      最近更新 更多