"첫 번째 예외"란 무엇입니까?


답변:


78

디버깅 개념입니다. 기본적으로 예외는 먼저 디버거로 던져진 다음 실제 프로그램으로 던져지며, 처리되지 않으면 두 번째로 디버거에 던져 져서 애플리케이션 자체 전후에 IDE에서 뭔가를 할 수있는 기회 를줍니다. 이것은 Microsoft Visual Studio의 발명품 인 것으로 보입니다.


21
이것은 디버깅 개념 이상입니다. C #은 런타임에 2 단계 예외 처리를 관찰하는 편리한 방법을 제공하지 않지만 vb.net은 제공합니다. 기본적으로 예외가 발생하면 런타임은 호출 스택을 검색하여 누가이를 포착 할 것인지 찾는 것으로 시작됩니다. 그 과정이 발생 하기 전에 어떤 finally블록이 실행됩니다. 시스템이 누가 예외를 잡을 것인지 (그리고 누군가가 실제로 그 예외를 잡을 것인지를 결정하면) 시스템은 스택을 풀기 시작할 것입니다. finally블록 에서 예외가 발생하면 ...
— supercat 2013-04-29

18
... 원래 예외를 잡을 것으로 예상했던 코드가 그렇게하지 않을 수도 있습니다. 이상한 코너 케이스가 많이 있습니다.
— supercat 2013-04-29

5
이는 처리되지 않은 예외가 아닌 모든 throw 된 예외 를 중단하도록 디버거를 구성 했거나 throw하는 일부 문으로 "단계"하는 경우에 발생합니다. 당신은 메시지 참조 유형 'foo는'형식의 첫째 예외가 YourApp.exe에서 발생 . 계속 (F5)하거나 한 단계 더 진행 (F11) 할 수 있습니다. 그런 다음 catch이것에 대한 제어가 거기에 있습니다. catch블록 이 없으면 "두 번째 기회"중단이 발생합니다. 이번에는 메시지가 YourApp.exe에서 'foo'유형의 처리되지 않은 예외가 발생했습니다 . 여기에서 계속하거나 더 나아가려는 시도는 성공하지 못합니다.
— Jeppe Stig Nielsen

@supercat : 위의 의견에서 언급 한 세부 사항에 대해 어떻게 알 수 있습니까? 자기 실험의 결과인가? 책을 읽습니까 (어떤 것)? 그것은 매우 인상적인 통찰력입니다! 잠시 시간을내
— 어이

2
@NoSaidTheCompiler : 다양한 블로그에서 예외 처리에 대해 읽었습니다. "예외 필터 .net"을 검색하면 해당 주제에 대한 블로그가 표시 될 것입니다.
— supercat


4

나는 디버거를 사용하기 시작했고 이것에 부딪쳤다. 내 연구에서 MSDN 블로그 게시물 What is a First Chance Exception?을 발견했습니다 . 그것은 나를 위해 그것을 정리했습니다.

저에게있어 블로그 게시물에서 중요한 점은 이것이 디버거에 대한 알림을 의미하며, 제 코드가 반드시 처리해야하는 것이 아니라는 것입니다. 가장 중요한 것은 "첫 번째 예외 메시지가 대부분의 경우 문제가 있음을 의미하지는 않습니다. 암호."


해당 링크에서 도움 이 된 내용의 발췌 ( 전체 기사가 아님)를 입력하십시오. 삭제 된 동일한 링크에 대한 이전 링크 전용 답변이 있습니다.
— Mark Hall

저에게있어 가장 중요한 점은 이것이 디버거에 대한 알림을 의미하며 제 코드가 반드시 처리해야하는 것이 아니라는 것입니다. 가장 중요한 것은 "첫 번째 예외 메시지가 대부분 코드에 문제가 있음을 의미하지는 않습니다."
— codingatty

귀하의 답변에 귀하의 의견을 추가했으며 링크가 유지하기에 충분히 중요하다고 생각하며 이전에 제공된 것과 같은 링크 전용 답변으로 간주되지 않도록 노력하고 있습니다.
— Mark Hall

0

응용 프로그램이 디버깅 될 때 디버거는 예외가 발생할 때마다 알림을받습니다. 이 시점에서 애플리케이션은 일시 중단되고 디버거는 예외 처리 방법을 결정합니다. 이 메커니즘을 통한 첫 번째 통과를 "첫 번째 기회"예외라고합니다.

디버거의 구성에 따라 응용 프로그램을 다시 시작하고 예외를 전달하거나 응용 프로그램을 일시 중지 한 상태로두고 디버그 모드로 전환합니다. 애플리케이션이 예외를 처리하면 계속 정상적으로 실행됩니다.

첫 번째 예외 메시지는 대부분 코드에 문제가 있음을 의미하지 않습니다. 예외를 정상적으로 처리하는 응용 프로그램 / 구성 요소의 경우 첫 번째 예외 메시지는 예외 상황이 발생하여 처리되었음을 개발자에게 알립니다.


0

개발자의 관점에서 보면 코드에서 처리되지 않았 음을 의미하기 때문에 두 번째 예외에 더 가깝습니다 . 따라서 응용 프로그램이 중지됩니다.

첫 번째 기회는 그 중 다수가 될 수 있지만, 다시 한 번 개발 관점에서 더 우려하는 것은 애플리케이션 충돌로 이어질 수 있기 때문에 두 번째 기회입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.