是否有内置方法可以查看GenServer的当前状态?你总是可以实现一个简单的调用来返回状态,但是有更通用的方法吗?
当我运行时:observer.start我可以查看正在运行的应用程序并查看它们的状态,所以看起来可能。但它可能会做一些双重秘密的Erlang voodoo来实现这一点。
答案 0 :(得分:6)
这取决于您将如何使用它。
如果获取状态是业务逻辑的一部分,那么是 - 应该在您的应用程序中使用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,因为它非常有用。
希望有所帮助!