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


답변:


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.