Возврат кода ошибки в Erlang - PullRequest
1 голос
/ 18 апреля 2010

Я пишу некоторый код Erlang, и я очень не уверен, должен ли я позволить всему быстро потерпеть неудачу. Одна проблема, с которой я быстро сталкиваюсь, заключается в том, что для разработчика / пользователя сгенерированное исключение довольно бессмысленно. Любая идея, что я должен вернуть, что не даст эзотерику и трудно читать следы стека?

Ответы [ 4 ]

2 голосов
/ 18 апреля 2010

Я бы порекомендовал вам зарегистрироваться с помощью error_logger (3) и попросить разработчика посмотреть, что на самом деле происходит за кулисами. Рекомендуется следовать принципам OTP , чтобы собрать все данные, которые возвращаются виртуальной машиной при сбое процесса.

1 голос
/ 20 апреля 2010

Поскольку Erlang является функциональным языком, ошибки часто легко обнаружить, если вы склонны писать Чистые функции , потому что чистая функция с одним аргументом всегда будет возвращать один и тот же результат. Таким образом, имея трассировку стека, как только вы нашли неисправную функцию, вы можете выяснить, что вызвало ошибку. В отличие от императивного программирования, вам не нужно тратить много времени на отладку кода, часто вам даже не нужен отладчик, а поиск ошибки превращается в интересную игру. Эта статья полезна.

1 голос
/ 18 апреля 2010

Основной принцип Эрланга:

Заставь его разбиться!

Я нашел весьма полезным избегать так называемого защитного программирования . Эта концепция более подробно объясняется на странице правил программирования Erlang:

http://www.erlang.se/doc/programming_rules.shtml#HDR11

Более того, даже если некоторые ошибки Erlang могут быть немного загадочными, хороший способ справиться с ними - trace их! Трассировка в Эрланге довольно проста. Посмотрите этот краткий справочник:

http://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/

или просто обратитесь к официальной документации.

1 голос
/ 18 апреля 2010

Я бы посоветовал быстро потерпеть неудачу и научиться читать трассировки стека.

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