코드 프로젝트에서 소스 코드를 하나 가져왔는데, 수 년이 지난 코드라 그런지 Visual Studio 2005에서 빌드하려니 이런저런 오류가 많이 났다. 어찌어찌 손을 보고 코드를 실행시키는데 이게 웬걸 First-Chance Exception이 발생한다. C++을 다루다 안 다루다 하니 이 오류가 무슨 뜻인지 잊어버렸는데, 이 참에 정리해둔다.
First and second chance exception handling는 이 예외를 잘 설명해놨는데, 우리가 흔히 보는 예외는 Second-Chance Exception이다. 그에 비해 First-Chance Exception은 디버깅 모드에서만 발생하는데, 실제 예외(Second-Chance Exception)이 발생할 가능성이 있는 곳을 미리 탐지한다고 생각하면 쉽다. 이때 First-Chance Exception이 발생하더라도 실제 예외는 발생하지 않을 수 있다. 그러니 First-Chance Exception을 무시하더라도 어떤 의미에선 큰 지장이 없다.
이런 경우에는 Debug -> exception -> 다이알로그 창에서 맨 밑의 항목 Microsoft C++ Exception을 stop always로 설정하셔도 많은 부분을 잡아낼 수 있습니다. 이렇게 해두면 예를 들어 DB exception이 발생하여 보통때는 "~ 테이블을 찾을 수 없습니다.." 정도로 메시지를 뿌려주고 지나가는 경우에도 먼저 브레이크가 걸린 다음에 메시지 박스가 나타나는 것에서부터 쓰레드 관련 오류 메모리 관련 오류( Access Violation을 stop always로 설정)등등 많은 부분이 미리 캐치됩니다. visual studio 6.0에서 사용하는 내용이고 Debug -> exception 메뉴는 프로그램 실행 중에만 활성화됩니다. F5 누르고 프로그램 시작하셔서 설정하시면 됩니다.
First-Chance Exception은 한번도 보지 못했는데, 이런 뜻이었군요. stop always를 당장 켜 놔야겠습니다. 좋은 내용 잘 봤습니다.
저도 예외 설정을 켜놓고 작업하기 시작했습니다. 얼마나 도움이 될지는 지켜봐야겠네요.