2016-07-17 15 views
6

Właśnie zaczynam od Erlanga, więc w moim kodzie nie ma nic skomplikowanego. Często robię błędy, które prowadzą do błędów w czasie wykonywania.Jak dowiedzieć się, co spowodowało błąd runtime w Erlangu?

Problem jest zawsze widzę rzeczy tak:

{ "init zakończony do_boot" {undef [{ 'lexer_app.beam', start, [], []}, {startowych , start_it, 1, []}, {startowych, start_em, 1, []}]}}

zrzutu awaryjnego zapisywany jest: erl_crash.dump ... Gotowe startowy kończące się w do_boot()

Co prawie nie daje mi szybkiej informacji o tym, co poszło nie tak.

Tak więc, zastanawiam się, to jedyny sposób na debugowanie takich błędów, aby zaglądnąć w erl_crash.dump, który, szczerze mówiąc, wygląda jak całkowita abrakadabra i muszę jakoś rozgryźć nawet proste głupie błędy, patrząc na to ?

Główne pytania, czy można uzyskać bardziej przyjazne człowiekowi błędy, np. "Nie można przypisać zmiennej numerycznej" 5: 6 Person "?

Jaki jest zwykle przepływ pracy przy debugowaniu aplikacji?

+1

tutaj można przeczytać początku wiadomości: init VM zatrzymuje się do_boot ponieważ znalazł wywołanie niezdefiniowanej funkcji: "lexer_app.beam": start. Domyślam się, że zacząłeś erl z "erl -s lexer_app.beam" zamiast "erl -s lexer_app", z możliwością dodania ścieżki do pliku belki "erl -s lexer_app -pa path/to/beam" – Pascal

Odpowiedz

3

Nie oczekuje się, że będzie można po prostu odczytać tekst pliku crashdump. Zamiast tego powinieneś używać aplikacji crashdump viewer, która jest graficzną aplikacją, która pozwala wyświetlać w sposób przyjazny dla człowieka wszystkie szczegóły informacji zawarte w pliku crashdump.

2

Jeśli tylko chcesz zobaczyć całkiem comnsole komunikat o błędzie, można zrobić małą sztuczkę

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