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。另请参阅。