[javascript] Javascript에서 예외를 다시 발생 시키지만 스택을 보존하려면 어떻게해야합니까?

Javascript에서 예외가 발생할 때 정리를 수행하려고하지만 예외가 스택을 계속 전파하도록하십시오.

try {
  enterAwesomeMode();
  doRiskyStuff(); // might throw an exception
} catch (e) {
  leaveAwesomeMode();
  throw e;
}
doMoreStuff();
leaveAwesomeMode();

이 코드의 문제점은 예외를 잡아서 다시 던지면 스택 추적 정보가 해당 지점까지 손실되므로 예외가 다시 발견되면 스택에서 상위로 올라가면 스택 추적 만 다시 추적됩니다. -던지다. 실제로 예외를 던진 함수가 포함되어 있지 않기 때문에 짜증납니다.

결과적으로 try..finally는 적어도 Chrome에서 동일한 동작을 갖습니다 (즉, 정확하게 다시 던지는 것이 아니라 예외 처리기 블록이 있다는 것입니다).

누구나 Javascript에서 예외를 다시 던지지 만 이와 관련된 스택 추적을 유지하는 방법을 알고 있습니까? 실패하면 예외 안전 정리 처리기를 추가하고 예외가 발생할 때 완전한 스택 추적을 캡처하는 다른 방법에 대한 제안은 어떻습니까?

모든 포인터 주셔서 감사합니다 🙂



답변

이것은 Chrome의 버그입니다. 예외를 다시 발생 시키면 통화 추적이 유지됩니다.

http://code.google.com/p/chromium/issues/detail?id=60240

해결 방법을 모릅니다.

마침내 문제가 보이지 않습니다. 마지막으로 일부 경우 오류 콘솔에 예외가 자동으로 표시되지 않지만 개발 빌드에서 수정 된 것으로 보입니다.


답변

Error 객체의 stack 속성은 발생한 시점이 아니라 Error 객체 자체와 동시에 생성됩니다. 관용구 때문에 종종 동일합니다

   새로운 오류를 던지십시오 ( "message");

코드를 작성한 그대로 사용 하면 오류를 다시 발생시킬 때 스택 속성이 변경 되지 않습니다 .


답변