我刚刚开始使用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变量不能分配给类型编号"?
调试应用的常用工作流程是什么?
答案 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