如果我编写一些 erlang 代码来构建监督树,然后在启动时使用以下命令启动应用程序,可能很难找出它为什么不起作用:
erl -s myapp -pa ebin ... ...
(myapp 示例模块)
-module(myapp).
-export([start/0]).
start() -> application:start(myapp).
假设我的应用程序启动了一个主管 myapp_sup。myapp_sup 轮流启动多个主管(比如说 server_sup、database_sup、another_sup)。
这些主管将启动一些 gen_servers。
在某些时候,如果我的代码中有错误,我找不到它!
我在一些 gen_server 的 init 回调中写了一个对 somemodule:functionthatdoesntexists() 的调用。
vm 所说的只是“init terminating in do boot”,然后显示错误匹配的错误位置、精确的文件和我的顶级模块(myapp)的行。
(不匹配,因为 ok = application:start(...) 将不匹配)。
我查看了 erl_crash.dump 文件,没有关于这个未定义函数的信息(但我在原子列表中找到了它)。
所以,我写了一些日志来大致查看错误在哪里,但是我必须手动启动我的 gen_servers 以获取正确的错误信息。
我错过了什么,我怎么能更快地弄清楚?
谢谢