2016-07-17 115 views
6

Ho appena iniziato con Erlang, quindi non c'è ancora nulla di complesso nel mio codice. Spesso faccio degli errori che portano a errori di runtime.Come capire cosa ha causato un errore di runtime in Erlang?

Il problema è che ho sempre vedere le cose in questo modo:

{ "init terminante in do_boot", {undef, [{ 'lexer_app.beam', avviare, [], []}, {init , start_it, 1, []}, {init, start_em, 1, []}]}}

crash dump è in fase di scrittura: erl_crash.dump ... fatto init terminante in do_boot()

Che difficilmente mi dà informazioni rapide su cosa è andato storto. Quindi, mi chiedo, è l'unico modo per eseguire il debug degli errori come questo per esaminare in erl_crash.dump, che è, francamente, sembra abrakadabra totale e ho bisogno di capire in qualche modo anche semplici errori stupidi esaminandolo ?

Le domande principali, è possibile ottenere più errori di tipo umano, ad esempio "Variabile 5: 6 Persona di tipo stringa non assegnabile al tipo numero"?

Qual è il normale flusso di lavoro per il debug dell'applicazione?

+1

qui potete leggere l'inizio del messaggio: l'init del VM ferma do_boot perché ha trovato un chiama a una funzione indefinita: 'lexer_app.beam': start. Immagino che tu abbia iniziato con "erl -s lexer_app.beam" invece di "erl -s lexer_app", con la possibilità di aggiungere il percorso al file del fascio "erl -s lexer_app -pa path/to/beam" – Pascal

risposta

3

Non ci si aspetta che sia possibile leggere semplicemente il testo di un file crashdump. Piuttosto, dovresti usare lo crashdump viewer, che è un'applicazione grafica che ti consente di visualizzare in modo umano i dettagli delle informazioni contenuti in un file di crashdump.

2

Se si vuole solo vedere il messaggio di errore abbastanza comnsole, si può fare un piccolo trucco

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 
Problemi correlati