Erlang中的堆栈跟踪中缺少条目

kh212irz  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(147)

当我编译以下模块时:

-module(x).
-export([inp/0]).

f(X) ->
    g(X).

g(X) ->
    error(X).

inp() ->
    f(123).

然后计算x:inp(),得到以下输出:

[{x,g,1,[{file,"x.erl"},{line,8}]},
 {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,689}]},
 {erl_eval,try_clauses,8,[{file,"erl_eval.erl"},{line,919}]},
 {shell,exprs,7,[{file,"shell.erl"},{line,686}]},
 {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]},
 {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}]

finp的调用去了哪里?这种行为使得在我的案例中跟踪错误的原因变得非常困难,我如何获得完整的堆栈跟踪?
我正在使用OTP24

egmofgnx

egmofgnx1#

这是因为Erlang的编译器进行了优化。编译器推断,在这个特定的例子中,函数f()inp()只用于将一个数字传递给函数g(),它们不能用于其他任何事情,甚至理论上也不能。因此编译器"优化掉它们",实际上只编译函数g()

相关问题