Erlang 正在获取gen_服务器/gen_fsm状态以进行调试
是否可以获取Erlang 正在获取gen_服务器/gen_fsm状态以进行调试,erlang,gen-server,Erlang,Gen Server,是否可以获取gen_服务器进程的当前状态(可能通过发送一些系统消息)?它在调试时可能很有用 当然,我可以添加一条消息,将当前状态返回到handle\u 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
gen_服务器
进程的当前状态(可能通过发送一些系统消息)?它在调试时可能很有用
当然,我可以添加一条消息,将当前状态返回到handle\u 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};
...
但是是否有内置的东西(即使有点粗糙)?使用。它的定义是:
get_status(Name,Timeout) ->
{status, Pid, {module, Mod}, [PDict, SysState, Parent, Dbg, Misc]}
SysState
将包含进程的状态。它适用于所有使用OTP行为的流程,以及实现proc_lib
和sys
要求的其他流程。实际上有一个直接返回状态的函数:。它接受pid或进程名称,并且可以选择超时。使用内置调试器连接到gen_server进程并实际调试它有什么问题?嵌入式系统中没有GS,因此没有调试器(或者可以在没有图形的情况下运行)。如果节点可以从外部访问,您可以使用GS-IMHO从远程计算机对其进行调试,这是Erlang的优点之一。如果调试器不起作用,您可以始终使用dbg设置跟踪模式,但是这两种方法都要求您通过发送命令来查看状态。如果您不想这样做,可以使用下面gleber描述的sys:get_status。另请参阅。