我已经阅读了这里的帖子: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
提前谢谢!
答案 0 :(得分:0)
可能是启动订单问题。指定要使用-s(或-run或-eval)运行的命令意味着它可以非常快速地启动,而系统的某些部分可能仍在后台启动。尝试在函数开始时添加一个睡眠,看它是否有任何改变。在这种情况下,尝试找出取决于订单的内容。
答案 1 :(得分:0)
我正在使用Erlang版本19.2。我不确定这是否是这个版本中的错误,或者是启动程序的要求,但我添加了一个.app.src文件并添加了“-eval”应用程序:start(myprog)'“并且程序将现在开始吧!
请注意,如果没有app.src文件且没有应用程序,它不会以-s,-eval或其中任何一个开头:start