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

时间:2011-07-24 18:00:41

标签: erlang

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

-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完成此操作。然而,我使用钢筋,我不知道该如何做到这一点。我已经尝试将以下内容添加到我的rebar.config:

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

这会出现以下错误:

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

2 个答案:

答案 0 :(得分:3)

rebar.config中编译器的定义应如下所示:

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

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

当前版本的螺纹钢(螺纹钢版本:2日期:20111205_155958 vcs:git 54259c5)也支持编译器定义。

rebar -D <defines> compile

请参阅rebar --help了解更多螺纹钢选项。

答案 1 :(得分:1)

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