2016-07-17 22 views
6

Sadece Erlang ile başlıyorum, bu yüzden kodumda henüz karmaşık bir şey yok. Genellikle çalışma zamanı hatalarına neden olan hatalar yaparım.Erlang'da bir çalışma zamanı hatasına neyin sebep olduğunu nasıl anlayabiliriz?

sorunu hep böyle şeyleri görmek edilir:

{ "do_boot sonlanan init", {undef, [{ 'lexer_app.beam', başlangıç, [], []}, {init ... erl_crash.dump do_boot()

yılında init sonlanan yapılır: start_it, 1, []}, {init, start_em, 1, []}]}}

Kilitlenme dökümü yazılı ediliyor

Neyin yanlış gittiğiyle ilgili hemen bilgi vermekte zorlanıyorum.

Yani, merak ediyorum, bu gibi hataların hatalarını ayıklamak için tek yol erl_crash.dump'a bakmaktır, yani, tamamen abrakadabra'ya benziyor ve bir şekilde basit aptal hataları anlamaya ihtiyacım var. ?

Asıl sorular, daha fazla insan dostu hatalar elde etmek mümkün mü, "5: 6 tip dizgisi için kişi sayısı değişkeni tip numarasına atanamaz" gibi?

Uygulamanın hata ayıklaması olağan iş akışı nedir?

+1

Küçük bir hile yapabilirsiniz: Bir bulduğu için VM init do_boot durur undefined işlevine çağrı: 'lexer_app.beam': start. Ben "erl -s lexer_app" yerine "erl -s lexer_app.beam" ile erl başladınız sanırım, sonuç olarak "hl -s lexer_app -pa yolu// beam" kiriş dosyasına yol ekleme seçeneği ile – Pascal

cevap

3

Sadece bir crashdump dosyasının metnini okuyabilmeniz mümkün değil. Bunun yerine, bir crashdump dosyasının içerdiği tüm bilgi ayrıntılarını insan dostu bir şekilde görüntülemenizi sağlayan grafiksel bir uygulama olan crashdump viewer kullanıyor olmalısınız. Sadece oldukça comnsole hata mesajı görmek istiyorsanız

2

, size mesajın başlangıcını okuyabilir burada

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 
İlgili konular