代码之家  ›  专栏  ›  技术社区  ›  ZeissS

是否可以在错误记录器处理程序中获取错误的stacktrace?

  •  2
  • ZeissS  · 技术社区  · 15 年前

    我目前正在编写一个错误记录器处理程序,并希望获取发生错误的stacktrace(更准确地说:在 error_logger:error* 被称为。但我不能用 erlang:get_stacktrace() 方法,因为我处于不同的过程中。

    有人知道在这里获取stacktrace的方法吗?

    谢谢

    2 回复  |  直到 15 年前
        1
  •  0
  •   andi5    15 年前

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

        2
  •  3
  •   Kent    15 年前

    get_stack trace()返回“上一个异常的堆栈返回跟踪”。在错误记录器中抛出并捕获异常:error(),然后就可以获取stacktrace。

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