Как отлаживать в Erlang? - PullRequest
       3

Как отлаживать в Erlang?

2 голосов
/ 14 февраля 2012

Когда я запускаю свой широковещательный сервер, я получаю сообщение об ошибке:

=ERROR REPORT==== 14-Feb-2012::16:22:29 ===
Error in process <0.757.0> with exit value: {badarg,[{mymodule1,func1,1}]}


=ERROR REPORT==== 14-Feb-2012::16:22:30 ===
Error in process <0.751.0> with exit value: {function_clause,[{mymodule2, func2,[{#Port<0.2

Ответы [ 2 ]

3 голосов
/ 15 февраля 2012

При отладке ошибки или сбоя часто полезно посмотреть, какие входные и выходные данные получает определенная функция.Утилита отладки redbug в eper repo делает ее довольно простой

Примеры:

%%% Trace a function:
1>redbug:start("lists:sort")
2>lists:sort([3,1,2]).

21:41:00 <{erlang,apply,2}> {lists,sort,[[3,1,2]]}

%%% Trace a module and also get the return value
3>redbug:start("string->return")
4>string:to_upper("foo").

21:41:10 <{erlang,apply,2}> {string,to_upper,["foo"]}
21:41:10 <{erlang,apply,2}> {string,'-to_upper/1-lc$^0/1-0-',["foo"]}
...
21:41:10 <{erlang,apply,2}> {string,to_upper,1} -> "FOO"

Так что в вашем коде я бы, например, увидел, что получает вход mymodule1: func1:

1>redbug:start("mymodule1:func1").
2> %% redo the call that caused the crash
3 голосов
/ 14 февраля 2012

function_clause означает просто, что не существует определения для функции mymodule2:func2, которая соответствует аргументам. Э.Г.

func2({X, Y}) -> ... %% only accepts a tuple of size 2 

func2([1, 2, 3])%% called with a list instead; will fail with function_clause

badarg с вашей функцией может быть вызвано из-за неправильных аргументов встроенной функции: http://erlang.2086793.n4.nabble.com/function-badarg-td3645808.html

См. Список других причин отказа здесь: http://learnyousomeerlang.com/errors-and-exceptions

Для отладки: 1) последняя версия Erlang (R15B) должна включать номера строк в сообщениях об исключениях; 2) вы можете использовать отладчик , который поставляется с Erlang.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...