有没有办法访问 GenServer 的状态?
Is there a way to access the state of a GenServer?
是否有内置的方式来查看 GenServer 的当前状态?您总是可以实现对 return 状态的简单调用,但是有更通用的方法吗?
当我 运行 :observer.start 我可以查看 运行ning 应用程序并查看它们的状态,所以这似乎是可能的。但它可能正在做一些双重秘密的 Erlang 巫术来获得它。
这取决于您将如何使用它。
如果获取状态是您业务逻辑的一部分,那么是的 - 这应该在您的应用程序中使用 GenServer.call
到 return 状态正确建模。
如果您仅在应用程序的 debugging/insights 方面需要它,您可以像这样使用 :sys.get_state
:
iex> :sys.get_state(pid)
# some state printed
请注意 :sys.get_state
将接受 pid
或服务器名称(如果它是在其中注册的)。
此外,请查看 Elixir 的 GenServer
文档中的 this section about debugging with :sys
module,因为它非常有用。
希望对您有所帮助!
是否有内置的方式来查看 GenServer 的当前状态?您总是可以实现对 return 状态的简单调用,但是有更通用的方法吗?
当我 运行 :observer.start 我可以查看 运行ning 应用程序并查看它们的状态,所以这似乎是可能的。但它可能正在做一些双重秘密的 Erlang 巫术来获得它。
这取决于您将如何使用它。
如果获取状态是您业务逻辑的一部分,那么是的 - 这应该在您的应用程序中使用 GenServer.call
到 return 状态正确建模。
如果您仅在应用程序的 debugging/insights 方面需要它,您可以像这样使用 :sys.get_state
:
iex> :sys.get_state(pid)
# some state printed
请注意 :sys.get_state
将接受 pid
或服务器名称(如果它是在其中注册的)。
此外,请查看 Elixir 的 GenServer
文档中的 this section about debugging with :sys
module,因为它非常有用。
希望对您有所帮助!