Можно ли получить трассировку стека ошибки в обработчике error_logger? - PullRequest
2 голосов
/ 12 февраля 2010

Я сейчас пишу обработчик error_logger и хотел бы получить трассировку стека, где произошла ошибка (точнее: в месте, где был вызван error_logger:error*). Но я не могу использовать метод erlang:get_stacktrace(), так как я нахожусь в другом процессе.

Кто-нибудь знает способ получить здесь трассировку стека?

Спасибо

Ответы [ 2 ]

3 голосов
/ 12 февраля 2010

get_stacktrace () возвращает «обратную трассировку стека последнего исключения». Бросьте и поймайте исключение внутри error_logger: error (), и тогда вы сможете получить трассировку стека.

error() ->
  try throw(a) of
    _ -> a
  catch
    _:_ -> io:format("track is ~p~n", erlang:get_stacktrace())
  end.
0 голосов
/ 13 февраля 2010

Я не полностью отладил его, но я полагаю, что функции ошибок просто отправляют сообщение (запустить и забыть) процессу регистрации ошибок, поэтому во время вызова вашего обработчика после получения сообщения отправитель может делать что-то совершенно другое. Отправленное сообщение может содержать след, но я в этом сильно сомневаюсь.

...