Erlang VM -s Argument导致我的程序失败

时间:2017-08-18 12:40:25

标签: erlang erl

我已经阅读了这里的帖子:Erlang VM -s argument misbehaving并且一直在排除故障。

当我运行没有-s标志的erlang vm时,我的函数可以工作:

bridge_sup:start_link().

   Bridge Supervisor Initializing
   [warning] ClientId is NULL!
   [warning] ClientId is NULL!
   Success
   Success

但是,如果我设置了-s标志,当我的函数继续调用另一个函数emqttc:start_link(...)时它永远不会返回:

Bridge Supervisor Initializing
   [warning] ClientId is NULL!
   [warning] ClientId is NULL!

我可以验证这不仅仅是打印问题,因为我连接的程序没有收到任何信号。

在Erlang VM中可能导致这种情况的原因是什么?我也试过使用eval来达到同样的效果。这是./run代码:

erl -pa ebin -pa deps/*/ebin

提前谢谢!

2 个答案:

答案 0 :(得分:0)

可能是启动订单问题。指定要使用-s(或-run或-eval)运行的命令意味着它可以非常快速地启动,而系统的某些部分可能仍在后台启动。尝试在函数开始时添加一个睡眠,看它是否有任何改变。在这种情况下,尝试找出取决于订单的内容。

答案 1 :(得分:0)

我正在使用Erlang版本19.2。我不确定这是否是这个版本中的错误,或者是启动程序的要求,但我添加了一个.app.src文件并添加了“-eval”应用程序:start(myprog)'“并且程序将现在开始吧!

请注意,如果没有app.src文件且没有应用程序,它不会以-s,-eval或其中任何一个开头:start