我正在编写一个error_logger处理程序,并希望获得发生错误的堆栈跟踪(更准确地说:在调用error_logger:error*
的地方)。但是我不能使用erlang:get_stacktrace()
方法,因为我处于不同的过程中。
有人知道在这里获得堆栈跟踪的方法吗?
由于
答案 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),因此在收到消息后调用处理程序时,发送方可能做一些完全不同的事情。发送的消息可能包含回溯,但我非常怀疑它。