【问题标题】:Is it possible to get the stacktrace of an error in the error_logger handler?是否可以在 error_logger 处理程序中获取错误的堆栈跟踪?
【发布时间】:2010-02-13 07:10:14
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: erlang stack-trace


    【解决方案1】:

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

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

    【讨论】:

    • 这种方法的一些问题:a) 可能没有真正的异常,只是调用 error() b) 我无法修改 error() 函数,因为它是 stdlib 的一部分 c)我在不同的进程中,所以我不能打电话给get_stacktrace()
    • 对不起。我误解了这个问题。
    【解决方案2】:

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

    【讨论】:

    • 不,它不包含它。它相信,也没有办法获得这些信息。只是要求确定。 :(
    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2021-11-19
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2014-08-20
    相关资源
    最近更新 更多