【问题标题】:"init terminating in do_boot" is thrown when executing Erlang script执行 Erlang 脚本时抛出“init terminating in do_boot”
【发布时间】:2015-07-17 11:03:12
【问题描述】:

这是我在“factorial.erl”中的代码:

-module(factorial).
-author("jasonzhu").

%% API
-export([fac/1]).

fac(0) -> 1;
fac(N) -> N * fac(N-1).

在提示符下与此代码交互时,它可以正常工作:

1> c(factorial).
{ok,factorial}
2> factorial:fac(20).
2432902008176640000

但是如果我从命令行编译并执行它,就会出现一些错误。

Jasons-MacBook-Pro:src jasonzhu$ erlc factorial.erl 
Jasons-MacBook-Pro:src jasonzhu$ erl -noshell -s factorial fac 20 -s init stop
{"init terminating in do_boot",{badarith,[{factorial,fac,1,[{file,"factorial.erl"},{line,8}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

谁能帮帮我?我是 Erlang 的新手,非常感谢!

【问题讨论】:

    标签: erlang erlang-shell


    【解决方案1】:

    除了官方文档How to Interpret the Erlang Crash Dumps之外,此选项并非特定于 OP 的问题,它可能对来自“init terminating in do_boot”搜索的人有用

    如果您的代码已经搁置了一段时间,而您又开始使用它,重新编译可能会消除此错误

    1. 删除_build/目录
    2. 删除 rebar.lock 文件
    3. 编译/dir_with_rebarconfig$ rebar3 release

    【讨论】:

      【解决方案2】:

      -noshell 语法是

      erl -noshell -s Module Function Arguments
      

      其中 Arguments 是一个原子列表。所以你必须从列表中获取 'fac' 参数并将其转换为整数。

      这个

      -module(factorial).
      
      -export([fac/1]).
      
      fac([N]) ->
          X = fac(list_to_integer(atom_to_list(N))),
          io:format("~p~n", [X]);
      fac(0) -> 1;
      fac(N) -> N * fac(N-1).
      

      作品

      >>> erl -noshell -s factorial fac 20 -s init stop
      2432902008176640000
      

      【讨论】:

        猜你喜欢
        • 2020-12-25
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 2019-01-28
        • 2013-02-07
        • 2022-12-08
        相关资源
        最近更新 更多