如何在Erlang中跟踪函数调用?

时间:2012-04-25 08:06:58

标签: debugging erlang supervisor

我在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])

之后知道接下来发生了什么

1 个答案:

答案 0 :(得分:3)

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

如果主管是任何其他类型(one_for_oneone_for_allrest_for_one),它会尝试在启动时启动子规范中的所有子项,但是{{ 1}} supervisor用于创建大量的子级,这些子级只根据其参数列表而有所不同,因此在这种情况下,simple_one_for_one函数中的子规范只扮演模板的角色。