【发布时间】:2010-02-13 07:10:14
【问题描述】:
我目前正在编写一个 error_logger 处理程序,并希望获取发生错误的堆栈跟踪(更准确地说:在调用 error_logger:error* 的地方)。但我不能使用erlang:get_stacktrace() 方法,因为我处于不同的进程中。
有人知道在这里获取堆栈跟踪的方法吗?
谢谢
【问题讨论】:
标签: erlang stack-trace
我目前正在编写一个 error_logger 处理程序,并希望获取发生错误的堆栈跟踪(更准确地说:在调用 error_logger:error* 的地方)。但我不能使用erlang:get_stacktrace() 方法,因为我处于不同的进程中。
有人知道在这里获取堆栈跟踪的方法吗?
谢谢
【问题讨论】:
标签: erlang stack-trace
get_stacktrace() 返回“最后一个异常的堆栈回溯”。在 error_logger:error() 中抛出并捕获异常,然后您可以获取堆栈跟踪。
error() ->
try throw(a) of
_ -> a
catch
_:_ -> io:format("track is ~p~n", erlang:get_stacktrace())
end.
【讨论】:
error() 函数,因为它是 stdlib 的一部分 c)我在不同的进程中,所以我不能打电话给get_stacktrace()
我还没有完全调试它,但我认为错误函数只是向错误记录器进程发送一条消息(触发并忘记),因此在收到消息后调用您的处理程序时,发送方可能正在做一些完全不同的事情。发送的消息可能包含回溯,但我非常怀疑。
【讨论】: