【问题标题】:How to trace function call in Erlang ?如何在 Erlang 中跟踪函数调用?
【发布时间】:2012-04-25 17:24:01
【问题描述】:

我在 my_sup.erl 中有一个这样的函数:

init([ems_media_sup]) ->
  {ok, {{simple_one_for_one, ?MAX_RESTART, ?MAX_TIME}, [
   {ems_media_sup, {ems_media, start_link, []}, temporary, 2000, worker, [ems_media]}]
}};

但是ems_media.erl中没有名为start_link/1的函数,我想知道为什么运行时没有错误

supervisor:start_link(?MODULE, [ems_media_sup])

那么,如何知道调用 init([ems_media_sup]) 之后接下来发生了什么

【问题讨论】:

    标签: debugging erlang erlang-supervisor


    【解决方案1】:

    这是因为 my_sup 的类型为 simple_one_for_one - 所以它只会在通过 supervisor:start_child/2 明确要求时启动子进程。

    如果主管是任何其他类型(one_for_oneone_for_allrest_for_one),它会尝试在启动时启动子规范中的所有子,但 simple_one_for_one 主管用于创建大型子项的数量仅因参数列表而异,因此在这种情况下,init 函数中的子项规范仅起到模板的作用。

    【讨论】:

    • 我认为很好的答案,稍后会深入研究
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2011-01-26
    • 2010-09-26
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    相关资源
    最近更新 更多