【发布时间】:2011-05-14 08:02:45
【问题描述】:
是否可以获得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)?
【问题讨论】:
-
用内置调试器连接gen_server进程并实际调试有什么问题?
-
嵌入式系统中没有GS,所以没有调试器(或者它可以在没有图形的情况下运行?)。
-
如果节点可以从外部访问,您可以使用 GS 从远程机器调试它 - 恕我直言,这是 Erlang 的强项之一。
-
如果调试器不起作用,您可以随时使用 dbg 设置跟踪模式,但是这两种方法都需要您通过发送命令来查看状态。如果你不想要这个,你可以使用 sys:get_status,如下 gleber 所述。
标签: erlang gen-server