gen_server:start/4中`Func`参数的类型签名是什么?
{install, {Func, FuncState}} 中的 Func 是OTP调试体系规定的自定义调试处理函数,具体约束如下:
- 元数必须为2,需接收2个入参
- 第一个入参:当前触发的调试事件,类型为任意Erlang term,常见的事件包括:
{in, Msg}:gen_server进程收到外部消息{out, Msg, TargetPid}:gen_server进程向指定进程发送消息{return, Caller, Result}:gen_server处理完同步调用后返回结果- 其余还包括进程状态变更、超时触发等各类生命周期事件
- 第二个入参:初始化时传入的
FuncState,类型可由开发者自定义,用于保存调试过程中的上下文数据 - 返回值要求:必须返回更新后的
FuncState,该值会作为下一次调试事件触发时传入的第二个参数
以下是简单的使用示例:
%% 自定义调试函数:打印所有收到的消息,累计消息计数 custom_debug({in, Msg}, Count) -> io:format("[Debug] 收到消息:~p,当前累计收到消息数:~p~n", [Msg, Count + 1]), Count + 1; %% 其余事件不处理,直接返回当前状态 custom_debug(_Event, Count) -> Count.
启动gen_server时传入调试配置即可生效:
gen_server:start_link({local, my_server}, my_mod, [], [{debug, [{install, {fun custom_debug/2, 0}}]}])
内容的提问来源于stack exchange,提问作者Max Heiber
相关产品推荐
相关产品推荐

