문제

나는 최근에 개발을 추가 모듈에 대한 기존 서비스에 의해 개발되고 있습니다.그는 배치했던 try/catch 블록에는 주요 작업 기능을 잡기 위해 모든 unhadled 는 예외를 부풀어 이 수준까지,로그인을 함께 스택 추적 정보 등:

try
{
    // do main work
}
catch(Exception ex)
{
    // log exception info
}

이 프로그램을 만드는 매우 안정적(으로'가능성이 충돌'),나는 그것을 미워하기 때문에 이 테스트는 나의 코드,나는 보지 않는 예외가 발생합니다.물론 제가 볼 수 있는 예외에서 로그를 볼 수 있으면 새로운 항목이 있지만,나는 아주 많이 선호하는 직접 피드백을 얻기의 예외는 순간 그것은 던져(커서가 오른쪽에 라인에서 코드,시기 바랍니다).

제이 최고 수준 try/잡는 적어도 내가 여전히 코딩 및 테스트.하지만 지금은 나 작업이 끝나고 나는 어떠했는지를 결정하기에 다시 배치 릴리스,또는 아닙니다.내 생각에 나는 그것을 해야 하기 때문에,그것은 서비스를 더욱 안정적이고,그것의 요점은 그것이 백그라운드에서 실행할 필요 없이 어떤 감독.다른 한편으로 읽어야 하나만 특정 예외(로 IoException),지 않은 일반적으로 Exception.

무엇인가에 대한 조언이 문제입니까?

여,프로젝트입니다 C#으로 작성되지만,나는 또한 관심에 응답을 위한 비.NET 언어입니다.

도움이 되었습니까?

해결책

다시 넣어.

예외가 있어야만 관련을 테스트하는 동안.그렇지 않으면 의미가 없습니다 그것을 사용합니다.

로깅 괜찮습니다.

할 수 있습 또한 사용하여 디버그 상징에 의해 정의된 Visual Studio 디버그 빌드에 대한으로 플래그입니다.

    ...
    } catch( Exception e ) { 
#if DEBUG
          throw;
#else
          log as usual 
#endif
    }

그래서 다음 시간에는 수정이 필요하는 디버그 깃발을 설정해야 진정한 예외 나타납니다.

다른 팁

에서 어떤 Java 응용 프로그램,당신은 단지에 대해 항상 정의하려는 예외 처리를 위한 포착되지 않는 예외로 무언가 이것을 좋아한다:

Thread.setDefaultUncaughtExceptionHandler( ... );

는 객체을 잡을 것입니다 이러한 포착되지 않는 예외 적어도 로그 실패 그래서 당신은 기회가 그것에 대해 알 수 있습니다.그렇지 않으면,는 보장은 없을 것이 통보되는 스레드에 걸렸다는 예외 없지 않는 한 그것은 당신의 주요 Thread.

을 수행하는 것 외에도 이 대부분의 스레드를 시도/을 잡는 곳에 나를 잡을 겁 RunnableException (지 Error 다)및 로그인...일부 스레드가 죽을 때 이런 것이다 다른 사람을 무시하고 로그,다른 사람이 표시됩니다 불평하는 사용자와 사용자에 결정에 따라 필요합니다.이 시도/을 잡아주의 루트 스레드에서 Runnable.run() 방법 또는 동일합니다.이후 try/캐치의 루트에는 스레드가 필요 없는 때때로 사용이 잡을 수 있습니다.

내가 쓸 때에는 C#,나는 코드가 유사합니다.하지만 이에 따라 모든 필요합니다.은 예외 중 하나는 것이 데이터를 손상?그렇지 않을 잡고 그것을 무시합니다.항상 그것은 로그하지만,다음 응용 프로그램은 죽습니다.대부분의 예외는지의 이런 종류,그러나입니다.

이상적으로 당신이 원하는 처리는 예외로 가까운 곳에 그것이 발생 가능한 한 그러나 의미하지는 않는 세계적인 예외 처리기는 나쁜 생각이 아니다.위해 특별히는 서비스를 계속 실행되어야 하는 모든 비용에.내가 계속할 것 당신이 무엇을하고있다.비활성화 하는 동안 그것을 디버깅하지만 떠날 장소에 그것을 위해 생산이다.

마음에 그것으로만 사용해야 합 안전 net.아직도 모두 잡으려고 예외가기 전에 그들이 상승합니다.

충동을 잡는 모든 예외하고 프로그램으로'안정적인'는 매우 강력하고 아이디어는 것이 매우 유혹하는 실제로 모든 사람.문제 당신은 이것은 그냥 계략 및 프로그램이 잘 될 수 있습니다 버리고 더 나쁘고,w/o 의 표시로 실패입니다.아무도 모니터링 로그에 정기적으로 한다.
나의 통보 것을 시도하도록 유도 다른 개발을 수행한 광범위한 테스트 및 배포에 생산 w/o 외부 잡을 수 있습니다.

당신이보고 싶은 경우 예외가 발생할 때,Visual Studio 에서 갈 수 있는 디버그 메뉴를 선택,예외하고 당신이 말할 수 있는 디버거를 한 빨리 예외가 발생합니다.당신이 얻을 무엇을 선택 형식의 예외가 있습니다.:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top