2010-11-23 3 views
11

gen_server 프로세스의 현재 상태를 가져올 수 있습니까 (아마도 일부 시스템 메시지를 보냄)? 디버깅 할 때 유용 할 수 있습니다. 내장 (이것은 조금 해키 경우에도) 뭔가를디버깅을위한 gen_server/gen_fsm 상태 얻기

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}; 
... 

하지만이 : 물론

, 나는 handle_call 현재 상태를 반환하는 메시지를 추가 할 수 있습니까?

+0

내장 디버거가있는 gen_server 프로세스에 연결하여 실제로 디버깅하는 것이 잘못된 이유는 무엇입니까? –

+0

임베디드 시스템에 GS가 없으므로 디버거가 없으므로 (또는 그래픽없이 실행할 수 있습니까?) –

+0

노드가 외부에서 액세스 할 수있는 경우 GS-IMHO를 사용하여 원격 시스템에서 디버그 할 수 있습니다. 이는 Erlang의 장점 중 하나입니다. –

답변

25

sys:get_status/1,2 function을 사용하십시오. 정의는 다음과 같습니다.

get_status(Name,Timeout) -> 
    {status, Pid, {module, Mod}, [PDict, SysState, Parent, Dbg, Misc]} 

SysState에는 프로세스 상태가 포함됩니다. OTP 동작을 사용하는 모든 프로세스와 proc_libsys 요구 사항을 구현하는 다른 프로세스에서 작동합니다.