첫 번째 예외는 정확히 무엇입니까? .NET 프로그램에서 어떻게 그리고 어디서 시작됩니까? 그리고 그것은 왜 그 독특한 이름 (우리가 말하는 '기회'에 대해 이야기하고있는 것입니까?)으로 불립니다.
첫 번째 예외는 정확히 무엇입니까? .NET 프로그램에서 어떻게 그리고 어디서 시작됩니까? 그리고 그것은 왜 그 독특한 이름 (우리가 말하는 '기회'에 대해 이야기하고있는 것입니까?)으로 불립니다.
답변:
디버깅 개념입니다. 기본적으로 예외는 먼저 디버거로 던져진 다음 실제 프로그램으로 던져지며, 처리되지 않으면 두 번째로 디버거에 던져 져서 애플리케이션 자체 전후에 IDE에서 뭔가를 할 수있는 기회 를줍니다. 이것은 Microsoft Visual Studio의 발명품 인 것으로 보입니다.
catch
이것에 대한 제어가 거기에 있습니다. catch
블록 이 없으면 "두 번째 기회"중단이 발생합니다. 이번에는 메시지가 YourApp.exe에서 'foo'유형의 처리되지 않은 예외가 발생했습니다 . 여기에서 계속하거나 더 나아가려는 시도는 성공하지 못합니다.
예외가 발생하면 첫 번째 예외 알림이 발생합니다. 두 번째 기회 알림은 잡히지 않았을 때입니다. (기회 – 디버거에서 코드에 침입 할 수있는 기회).
나는 디버거를 사용하기 시작했고 이것에 부딪쳤다. 내 연구에서 MSDN 블로그 게시물 What is a First Chance Exception?을 발견했습니다 . 그것은 나를 위해 그것을 정리했습니다.
저에게있어 블로그 게시물에서 중요한 점은 이것이 디버거에 대한 알림을 의미하며, 제 코드가 반드시 처리해야하는 것이 아니라는 것입니다. 가장 중요한 것은 "첫 번째 예외 메시지가 대부분의 경우 문제가 있음을 의미하지는 않습니다. 암호."
응용 프로그램이 디버깅 될 때 디버거는 예외가 발생할 때마다 알림을받습니다. 이 시점에서 애플리케이션은 일시 중단되고 디버거는 예외 처리 방법을 결정합니다. 이 메커니즘을 통한 첫 번째 통과를 "첫 번째 기회"예외라고합니다.
디버거의 구성에 따라 응용 프로그램을 다시 시작하고 예외를 전달하거나 응용 프로그램을 일시 중지 한 상태로두고 디버그 모드로 전환합니다. 애플리케이션이 예외를 처리하면 계속 정상적으로 실행됩니다.
첫 번째 예외 메시지는 대부분 코드에 문제가 있음을 의미하지 않습니다. 예외를 정상적으로 처리하는 응용 프로그램 / 구성 요소의 경우 첫 번째 예외 메시지는 예외 상황이 발생하여 처리되었음을 개발자에게 알립니다.
개발자의 관점에서 보면 코드에서 처리되지 않았 음을 의미하기 때문에 두 번째 예외에 더 가깝습니다 . 따라서 응용 프로그램이 중지됩니다.
첫 번째 기회는 그 중 다수가 될 수 있지만, 다시 한 번 개발 관점에서 더 우려하는 것은 애플리케이션 충돌로 이어질 수 있기 때문에 두 번째 기회입니다.
finally
블록이 실행됩니다. 시스템이 누가 예외를 잡을 것인지 (그리고 누군가가 실제로 그 예외를 잡을 것인지를 결정하면) 시스템은 스택을 풀기 시작할 것입니다.finally
블록 에서 예외가 발생하면 ...