我希望能够在我的模块中使用以下宏:
-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