Как отладить код erlang во время rebar3 eunit?
Я создал release
приложение с rebar3 (бета-4). Добавил несколько тестов eunit и написал немного кода.
Сейчас мне нужно отладить один тестовый пример, чтобы увидеть, что я должен добавить, чтобы реализация работала правильно.
Я нашел несколько статей об использовании dbg из консоли erlang и нашел, как написать отладочную информацию из eunit. Но мне нужно получить информацию из кода, который я должен проверить (фактическая реализация (логика)).
Есть ли способ отладки кода Erlang (реальный исходный код, а не тестовый), когда rebar3
используется с eunit
аргумент?
Спасибо
В настоящее время я использую трассировку в терминале, как здесь: https://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/
1 ответ
Один из способов сделать это - использовать rebar3
запустить оболочку под тестовым профилем, затем запустить отладчик и установить точки останова, например:
$ rebar3 as test shell
...
1> debugger:start().
{ok, <0.67.0>}
Появится графический интерфейс отладчика. Как только отладчик настроен и готов, запустите тест под eunit
:
2> eunit:test(your_test_module,[verbose]).
======================== EUnit ========================
your_test_module: xyz_test_ (module 'your_test_module')...
Предполагая, что вы установили подходящую точку останова в отладчике, это ударит ее, но вы, скорее всего, столкнетесь с проблемой при таком подходе: по умолчанию, eunit
время теста истекает через 5 секунд, что не дает много времени на отладку. Вам нужно указать более длительное время ожидания для вашего теста, поэтому в приведенном выше примере показано, что выполняется тестовое устройство с именем xyz_test_
, который оборачивает реальный тест с длительным таймаутом. Такое приспособление довольно просто:
-include_lib("eunit/include/eunit.hrl").
xyz_test_() ->
{timeout,3600,
[fun() -> ?assertMatch(expected_value, my_module:my_fun()), ok end]}.
Здесь фактическим тестом является анонимная функция, которая соответствует возвращаемому значению из my_module:my_fun/0
, который в этом примере представляет тестируемую бизнес-логику. Этот пример прибора устанавливает время ожидания теста на один час; Вы, конечно, можете установить его так, как вам нужно.