是否有可能在error_logger处理程序中获取错误的堆栈跟踪?

时间:2010-02-11 23:43:00

标签: erlang stack-trace

我正在编写一个error_logger处理程序,并希望获得发生错误的堆栈跟踪(更准确地说:在调用error_logger:error*的地方)。但是我不能使用erlang:get_stacktrace()方法,因为我处于不同的过程中。

有人知道在这里获得堆栈跟踪的方法吗?

由于

2 个答案:

答案 0 :(得分:3)

get_stacktrace()返回“最后一个异常的堆栈反向跟踪”。在error_logger:error()中抛出并捕获异常,然后就可以获得堆栈跟踪。

error() ->
  try throw(a) of
    _ -> a
  catch
    _:_ -> io:format("track is ~p~n", erlang:get_stacktrace())
  end.

答案 1 :(得分:0)

我还没有完全调试它,但我想错误函数只是向错误记录器进程发送一条消息(fire and forget),因此在收到消息后调用处理程序时,发送方可能做一些完全不同的事情。发送的消息可能包含回溯,但我非常怀疑它。