예외가 발생할 때마다 기록하는 응용 프로그램에 오류 로깅을 추가하라는 요청을 받았습니다.
로그를 수행 할 메서드가 있으며 모든 Catch 절에서 이것을 호출 할 수 있습니다.
앱에 말 그대로 수백 개의 try catch 문이 있기 때문에 이것은 어리석은 것처럼 보입니다.
Visual Studio에서는 try catch에 관계없이 모든 예외가 발생한 후에 IDE를 중단하도록 설정할 수 있으므로 이러한 종류의 기능을 사용할 수 있는지 궁금합니다 (발생할 때 코드 중단 점을 지정하지는 않음)
요약하면 내 질문은 다음과 같습니다.
사용자 지정 또는 CLR 예외가 throw 될 때마다이 메서드를 호출하는 이벤트 (또는 이와 유사한)를 발생시키는 방법이 있습니까?
이와 관련된 보너스 질문으로 메소드 진입 / 종료 로깅과 유사하게 수행 할 수 있습니까?
C # .Net 4.5 VS 2012
Visual Studio가 첫 번째 예외 (try-catch 블록 내부에서도 throw에서 중단)에서 중단되는 방식과 같이 함수를 호출 하려면 실행중인 FirstChanceExecption
이벤트 를 구독해야합니다 AppDomain
.
AppDomain.CurrentDomain.FirstChanceException += YourLoggingFunction;
AppDomain
프로그램의 모든 사람 에 대해이 작업을 수행해야 하지만 일반적이지 않은 작업을 수행하지 않는 한 모든 프로그램의 99 %는AppDomain
참조 이 MSDN 페이지를 당신이 그들을 사용하는 경우 다른 응용 프로그램 도메인에 가입에 대한 자세한 내용은.
인식하는 것보다 더 많은 예외가 발생할 수 있습니다. 일부 .NET 프레임 워크 코드는 내부적으로 예외를 throw하고 코드를 try-catch 블록에 포함하므로 표면 1에 도달하지 않거나 라이브러리 코드에 패턴이 있는지 확인합니다.
try
{
SomeFunctionThatThrows()
}
catch (Exception innerException)
{
throw new SomeMoreDetailedException(message, stateDetails, innerException);
}
이벤트를 구독하면 2SomeFunctionThatThrows()
에서 던진 예외 와 throw new SomeMoreDetailedException(
2 에서 발생한 예외가 모두 표시되기 시작 합니다.
1 : 이것은 네트워크 기반 I / O 호출에서 가장 흔하지 TimeoutException
만 a와 같은 예외 가 일반적이지만 최종 사용자는 사용자에게 알리기 전에 내부 재시도 논리와 같은 일이 발생할 수 있으므로 시간 초과 오류가 발생했음을 알아야합니다.
2 : " 내 코드 만 "을 비활성화 하고 throw 된 모든 예외를 중단하여 Visual Studio에서 볼 수도 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다