获取 gen_server/gen_fsm 状态以进行调试
是否可以获取 gen_server 进程的当前状态(大概通过发送一些系统消息)?调试时它可能很有用。
当然,我可以添加一条消息,将当前状态返回到handle_call
:
get_state(Server) -> gen_server:call(Server, '$get_state').
%% in every gen_server I want to debug
...
handle_call('$get_state', _From, State) ->
{reply, State, State};
...
但是是否有内置的东西(即使它有点hacky)?
Is it possible to obtain the current state of a gen_server
process (presumably by sending some system message)? It could be useful when debugging.
Of course, I can add a message which returns the current state to handle_call
:
get_state(Server) -> gen_server:call(Server, '$get_state').
%% in every gen_server I want to debug
...
handle_call('$get_state', _From, State) ->
{reply, State, State};
...
but is there something built-in (even if it is a bit hacky)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
sys:get_status/1,2
功能。它的定义是:SysState
将包含进程的状态。它适用于使用 OTP 行为的所有进程以及实现 proc_lib 和 sys 要求的其他进程。Use
sys:get_status/1,2
function. It's definition is:SysState
will contain state of the process. It works for all processes using OTP behaviors and other processes implementingproc_lib
andsys
requirements.实际上有一个直接返回状态的函数:
sys:get_state/ 1,2
。它接受进程的 pid 或名称,并且可以选择设置超时。There is actually a function that returns the state directly:
sys:get_state/1,2
. It accepts pid or name of the process and can optionally be given a timeout.