如何找出Erlang中导致运行时错误的原因?

时间:2016-07-17 12:47:59

标签: debugging erlang

我刚刚开始使用Erlang,因此我的代码中没有任何复杂功能。我经常犯错会导致运行时错误。

问题是我总是看到这样的事情:

  

{" init终止于do_boot",{undef,[{' lexer_app.beam',start,[],[]},{init,start_it,1,[] },{INIT,start_em,1,[]}]}}

     

正在写入崩溃转储:erl_crash.dump ...已完成   init终止于do_boot()

这几乎没有给我关于出了什么问题的快速信息。

因此,我想,这是调试这样的错误的唯一方法来研究erl_crash.dump,坦率地说,看起来像abrakadabra总和我需要以某种方式通过调查来找出简单的愚蠢错误?

主要问题是,是否有可能获得更加人性化的错误,例如" 5:6字符串类型的Person变量不能分配给类型编号"?

调试应用的常用工作流程是什么?

2 个答案:

答案 0 :(得分:2)

您不希望能够简单地阅读crashdump文件的文本。相反,您应该使用crashdump viewer,这是一个图形应用程序,可让您以人性化的方式查看crashdump文件包含的所有信息详细信息。

答案 1 :(得分:2)

如果你只想看到漂亮的comnsole错误信息,你可以做一个小技巧

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