예외 처리(Visual Studio SDK)
다음은 예외가 throw될 때 발생하는 프로세스에 대해 설명합니다.
예외 처리 프로세스
예외가 처음 throw되었지만 디버그 중인 프로그램의 예외 처리기에서 처리되기 전에 DE(디버그 엔진)는 IDebugExceptionEvent2를 SDM(세션 디버그 관리자)에 중지 이벤트로 보냅니다.
IDebugExceptionEvent2
는 예외에 대한 설정(디버그 패키지의 예외 대화 상자에 지정됨)에서만 사용자가 첫 번째 예외 알림에서 중지하도록 지정하는 경우 전송됩니다.SDM은 IDebugExceptionEvent2::GetException을 호출하여 예외 속성을 가져옵니다.
디버그 패키지는 IDebugExceptionEvent2::CanPassToDebuggee를 호출하여 사용자에게 표시할 옵션을 결정합니다.
디버그 패키지는 사용자에게 첫 번째 예외 대화 상자를 열어 예외를 처리하는 방법을 묻습니다.
사용자가 계속하도록 선택하면 SDM은 IDebugExceptionEvent2::CanPassToDebuggee를 호출합니다.
메서드가 S_OK를 반환하면 IDebugExceptionEvent2::P assToDebuggee를 호출합니다.
또는
메서드가 S_FALSE 반환하면 디버그 중인 프로그램에는 예외를 처리할 수 있는 두 번째 기회가 제공됩니다.
디버그 중인 프로그램에 두 번째 예외에 대한 처리기가 없는 경우 DE는
IDebugExceptionEvent2
를 SDM에 EVENT_SYNC_STOP으로 보냅니다.디버그 패키지는 사용자에게 첫 번째 예외 대화 상자를 열어 예외를 처리하는 방법을 묻습니다.
디버그 패키지는 IDebugExceptionEvent2::CanPassToDebuggee를 호출하여 사용자에게 표시할 옵션을 결정합니다.
디버그 패키지는 사용자에게 두 번째 예외 대화 상자를 열어 예외를 처리하는 방법을 묻습니다.
메서드가 S_OK를 반환하면
IDebugExceptionEvent2::PassToDebuggee
를 호출합니다.