監視ツリーを構築するための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はdo bootで終了します」と言ってから、不一致のエラーの場所、正確なファイル、および最上位モジュール(myapp)の行を表示します。
(ok = application:start(...)が一致しないため、不一致)。
erl_crash.dumpファイルを調べましたが、この未定義の関数に関する情報はありません(ただし、アトムリストにあります)。
そこで、エラーがどこにあるかを概算するためにログを作成しましたが、正しいエラー情報を取得するには、gen_serversを手動で起動する必要があります。
私は何が欠けていますか、どうすればそれをより速く理解できますか?
ありがとう