我希望能够在我的模块中使用以下宏:
-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"}}
答案 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。
要在运行时访问“-debug 1”参数,可以使用init:get_argument(debug)
。
# erl -debug 1
...
1> init:get_argument(debug).
{ok,[["1"]]}
2> init:get_argument(foo).
error