2010-11-23 6 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の要件を実装する他のプロセスで機能します。

関連する問題