2010-11-23 1 views
11

Возможно ли получить текущее состояние процесса gen_server (предположительно, отправив некоторое системное сообщение)? Это может быть полезно при отладке.Получение состояния gen_server/gen_fsm для отладки

Конечно, я могу добавить сообщение, которое возвращает текущее состояние в 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)?

+0

Что случилось с подключением к процессу gen_server со встроенным отладчиком и его отладки? – 2010-11-23 08:53:12

ответ

25

Использование sys:get_status/1,2 function. Это определение:

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

SysState будет содержать состояние процесса. Он работает для всех процессов с использованием поведения OTP и других процессов, реализующих proc_lib и sys.