用用户定义的变量启动erlang(使用rebar)



我希望能够在我的模块中使用以下宏:

-ifdef(debug).

我的启动脚本看起来像这样:

#!/bin/sh
PWD="$(pwd)"
#NAME="$(basename $PWD)"
erl -pa "$PWD/ebin" deps/*/ebin -boot start_sasl 
    -name foo@127.0.0.1 
    -debug 1 
    -s $NAME 
    +K true 
    +P 65536 

还需要添加什么以便在我的模块中定义调试?我需要这是动态的,这样我就不必修改源代码部署到生产中。在每个dev/qa/prod环境中使用不同的启动脚本是可以的,但不应该修改源代码。

对于erlc,这可以在-Ddebug中完成。我使用螺纹钢然而,我不知道如何做到这一点。我试着添加以下内容到我的钢筋配置:

{erl_opts, [{D, "debug"}]}.

这会产生以下错误:

{error,
 {1,
  erl_parse,
  "bad term"}}

编译器在钢筋中的定义。配置应该像这样:

{erl_opts, [{d, debug}]}.

注意:语法与编译器模块的语法完全相同:http://www.erlang.org/doc/man/compile.html

当前版本的钢筋(钢筋版本:2日期:20111205_155958 vcs: git 54259c5)不支持编译器定义,以及。

rebar -D <defines> compile

ifdef是一个预处理器宏,它在编译时得到评估和删除-您必须使用erlc -Ddebug module.erl之类的东西重新编译模块以更改它。如果你想在module.P中看到预处理器的输出,请添加"-P"标志。

要在运行时访问"-debug 1"参数,可以使用init:get_argument(debug)

# erl -debug 1
...
1> init:get_argument(debug).
{ok,[["1"]]}
2> init:get_argument(foo).  
error

最新更新