Начать erlang с определенной пользователем переменной (используя арматуру)? - PullRequest
1 голос
/ 24 июля 2011

Я бы хотел использовать в своих модулях следующий макрос:

-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 ]

3 голосов
/ 06 декабря 2011

Определение для компилятора в 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 голос
/ 24 июля 2011

ifdef - это макрос препроцессора, он оценивается и удаляется во время компиляции - вам придется перекомпилировать ваш модуль с чем-то вроде erlc -Ddebug module.erl, чтобы изменить его.добавьте флаг «-P», если вы хотите увидеть выходные данные препроцессора в модуле. P.

, чтобы получить доступ к аргументу «-debug 1» во время выполнения, вы можете использовать init:get_argument(debug).

# erl -debug 1
...
1> init:get_argument(debug).
{ok,[["1"]]}
2> init:get_argument(foo).  
error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...