2010-02-11 4 views
2

메신저는 현재 error_logger 핸들러를 작성 중이며 더 이상 오류가 발생하지 않는 스택 추적을 얻고 싶습니다 (더 정확하게는 error_logger:error*이 호출 된 곳). 하지만 나는 다른 프로세스에 있기 때문에 erlang:get_stacktrace() 메서드를 사용할 수 없습니다.error_logger 처리기에서 오류의 스택 추적을 가져올 수 있습니까?

스택 트레이스를 얻는 방법을 아는 사람이 있습니까?

감사

답변

0

내가 완전히 디버깅하지 않은,하지만 난 메시지가 수신 된 후 핸들러가 호출 될 때, 그래서 오류 기능은 단순히 오류 로거 프로세스에 메시지를 보내 (화재 및 잊어)한다고 가정 보낸 사람은 완전히 다른 것을하고있을 수도 있습니다. 보낸 메시지에는 백 트레이스가 포함될 수 있지만 매우 의심 스럽습니다.

+0

아니요, 포함되어 있지 않습니다. 그 정보를 얻는 방법은 없다고 믿습니다. 그냥 물어보십시오. :( – ZeissS

3

get_stacktrace() "지난 예외의 백 스택 추적"을 반환합니다. Error_logger : error()에서 예외를 던집니다. 그러면 스택 추적을 얻을 수 있습니다.

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

질문을 읽었습니까? – Zed

+0

이 접근법의 몇 가지 문제점 : a) 실제 예외가 없거나 error()를 호출했을뿐입니다. b) stdlib의 일부분이므로'error()'함수를 수정할 수 없습니다. c) 다른 프로세스, 그래서'get_stacktrace()'를 호출 할 수 없다 – ZeissS

+0

죄송합니다. 나는 그 질문을 오해했다. – Kent

관련 문제