2010-11-23 36 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}; 
... 

但有內置的(即使它是一個有點哈克)的東西嗎?

+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_libsys要求的進程的進程。