【发布时间】:2018-08-18 02:24:41
【问题描述】:
是否有内置方法可以查看 GenServer 的当前状态?你总是可以实现一个简单的调用来返回状态,但是有没有更通用的方法呢?
当我运行 :observer.start 时,我可以查看正在运行的应用程序并查看它们的状态,所以这似乎是可能的。但它可能正在做一些双重秘密的 Erlang 巫术来实现这一点。
【问题讨论】:
标签: erlang elixir erlang-otp
是否有内置方法可以查看 GenServer 的当前状态?你总是可以实现一个简单的调用来返回状态,但是有没有更通用的方法呢?
当我运行 :observer.start 时,我可以查看正在运行的应用程序并查看它们的状态,所以这似乎是可能的。但它可能正在做一些双重秘密的 Erlang 巫术来实现这一点。
【问题讨论】:
标签: erlang elixir erlang-otp
这取决于你将如何使用它。
如果获取状态是您的业务逻辑的一部分,那么是的 - 这应该在您的应用程序中正确建模,并使用 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,因为它非常有用。
希望有帮助!
【讨论】: