2011-07-24 4 views
1

erlangをユーザ定義変数で開始します(鉄筋を使用します)?私は私のモジュールに次のマクロを使用できるようにしたいと思い

-ifdef(debug). 

私の起動スクリプトは、次のようになります。

#!/bin/sh 
PWD="$(pwd)" 
#NAME="$(basename $PWD)" 
erl -pa "$PWD/ebin" deps/*/ebin -boot start_sasl \ 
    -name [email protected] \ 
    -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"}} 

答えて

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 
+0

プロダクションデプロイメントのために、このようなことはどうしたらよいですか?手動でモジュールを編集してデバッグプリプロセッサを削除しますか?生産のために – randombits

+0

を使用する場合は、-Ddebugフラグなしでコンパイルします。ソースコードを編集する必要はありません。 – butter71

+0

私は注意しなければならない、私は鉄筋を使用してコンパイルしています。だから、私は '' erlc''への明示的なアクセス権を持っていません – randombits

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オプションについては、rebar --helpを参照してください。

関連する問題