有没有办法访问GenServer的状态?

时间:2018-03-09 13:36:13

标签: erlang elixir otp

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

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

1 个答案:

答案 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,因为它非常有用。

希望有所帮助!