2016-07-17 10 views
6

Ich beginne gerade mit Erlang, also ist mein Code noch nicht komplex. Oft mache ich Fehler, die zu Laufzeitfehlern führen.Wie finde ich heraus, was einen Laufzeitfehler in Erlang verursacht hat?

Das Problem ist ich sehe die Dinge immer so:

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

Crash-Dump wird geschrieben: erl_crash.dump ... init Abschluss in do_boot()

getan

Welches gibt mir kaum schnelle Informationen darüber, was schief gelaufen ist.

Also, ich frage mich, ist der einzige Weg, um die Fehler so zu debuggen, um in erl_crash.dump zu suchen, die, ehrlich gesagt, aussieht wie totale abrakadabra und ich muss irgendwie einfache einfache dumme Fehler herausfinden, indem Sie hineinschauen ?

Die wichtigsten Fragen, ist es möglich, mehr menschenfreundliche Fehler zu bekommen, wie "5: 6 Person Variable des Typs String ist nicht zu Typ-Nummer zuweisbar"?

Wie sieht der übliche Workflow zum Debuggen der App aus?

+1

hier einen kleinen Trick können Sie den Anfang der Nachricht lesen kann: die init der VM stoppt in do_boot, weil es eine gefunden hat Aufruf an eine undefinierte Funktion: 'lexer_app.beam': start. Ich nehme an, Sie haben erl mit "erl -s lexer_app.beam" anstelle von "erl -s lexer_app" gestartet, eventuell mit der Option den Pfad zur Beamdatei hinzuzufügen "erl -s lexer_app -pa path/to/beam" – Pascal

Antwort

3

Es wird nicht erwartet, dass Sie den Text einer crashdump-Datei einfach lesen können. Stattdessen sollten Sie die crashdump viewer verwenden, eine grafische Anwendung, mit der Sie alle Informationsdetails einer crashdump-Datei auf benutzerfreundliche Weise anzeigen können.

2

Wenn Sie nur ziemlich comnsole Fehlermeldung sehen möchten, können Sie

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 
Verwandte Themen