12

プロセスの現在の状態を取得することは可能gen_serverですか (おそらくシステム メッセージを送信することによって)? デバッグ時に役立つ場合があります。

もちろん、現在の状態を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};
...

しかし、何かが組み込まれていますか(少しハッキーであっても)?

4

2 に答える 2

28

sys:get_status/1,2関数を使用します。その定義は次のとおりです。

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

SysStateプロセスの状態が含まれます。これは、OTP 動作を使用するすべてのプロセスと、実装proc_libおよびsys要件を実装するその他のプロセスで機能します。

于 2010-11-23T09:42:50.157 に答える
3

実際には、状態を直接返す関数があります: sys:get_state/1,2. プロセスの pid または名前を受け入れ、オプションでタイムアウトを指定できます。

于 2020-08-10T08:59:09.383 に答える