2016-07-17 6 views
6

私はErlangで始まったばかりなので、まだコードに複雑なものはありません。私はしばしばランタイムエラーにつながる間違いを犯します。Erlangでランタイムエラーが発生した原因を特定するにはどうすればよいですか?

問題は、私はいつもこのようなものを見ている:

{ "do_bootで終わるのinit"、{undefを、[{ 'lexer_app.beam'、スタート、[]、[]}、{のinitダンプに書き込まれている、start_it、1、[]}、{INIT、start_em、1、[]}]}}

クラッシュ... erl_crash.dump(do_bootで INIT終端を行う)

何が間違っていたかについての簡単な情報はほとんどありません。

こういったエラーをデバッグしてerl_crash.dumpを調べる唯一の方法は、率直に言えば、全体のabrakadabraのように見えます。私はそれを調べることによって何とか単純なばかげたエラーを見つけ出す必要があります?

主な質問は、「5:6人型変数の型変数が型番号に割り当てられない」のような人にやさしいエラーを出すことができるかどうかです。

アプリをデバッグする通常のワークフローは何ですか?

+1

少しトリックを行うことができます:それは発見したので、VMのinitはdo_bootで停止します未定義の関数を呼び出す: 'lexer_app.beam':start。 "erl -s lexer_app.beam"ではなく "erl -s lexer_app"の代わりに、erl -s lexer_app -pa path/to/beamというようにビームファイルにパスを追加するオプションを使用してerlを起動したと思います。 – Pascal

答えて

3

あなたは単にクラッシュダンプファイルのテキストを読むことはできません。むしろ、crashdump viewerを使用する必要があります。これは、クラッシュダンプファイルに含まれるすべての情報の詳細を人にやさしい方法で表示できるグラフィカルアプリケーションです。あなただけのかわいいcomnsoleエラーメッセージを表示したい場合は

2

、あなたがメッセージの先頭を読み取ることができ、ここで

7> {_type, {Reason, Stack}} = {"init terminating in do_boot",{undef,[{'lexer_app.beam',start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}. 
{"init terminating in do_boot", 
{undef,[{'lexer_app.beam',start,[],[]}, 
     {init,start_it,1,[]}, 
     {init,start_em,1,[]}]}} 
8> erlang:raise(exit, Reason, Stack). 
** exception exit: undef           
    in function 'lexer_app.beam':start/0 
     called as 'lexer_app.beam':start() 
    in call from init:start_it/1 
    in call from init:start_em/1 
関連する問題