다음을 통해 공유


예외 처리(Visual Studio SDK)

다음은 예외가 throw될 때 발생하는 프로세스에 대해 설명합니다.

예외 처리 프로세스

  1. 예외가 처음 throw되었지만 디버그 중인 프로그램의 예외 처리기에서 처리되기 전에 DE(디버그 엔진)는 IDebugExceptionEvent2를 SDM(세션 디버그 관리자)에 중지 이벤트로 보냅니다. IDebugExceptionEvent2는 예외에 대한 설정(디버그 패키지의 예외 대화 상자에 지정됨)에서만 사용자가 첫 번째 예외 알림에서 중지하도록 지정하는 경우 전송됩니다.

  2. SDM은 IDebugExceptionEvent2::GetException을 호출하여 예외 속성을 가져옵니다.

  3. 디버그 패키지는 IDebugExceptionEvent2::CanPassToDebuggee를 호출하여 사용자에게 표시할 옵션을 결정합니다.

  4. 디버그 패키지는 사용자에게 첫 번째 예외 대화 상자를 열어 예외를 처리하는 방법을 묻습니다.

  5. 사용자가 계속하도록 선택하면 SDM은 IDebugExceptionEvent2::CanPassToDebuggee를 호출합니다.

    • 메서드가 S_OK를 반환하면 IDebugExceptionEvent2::P assToDebuggee를 호출합니다.

      또는

      메서드가 S_FALSE 반환하면 디버그 중인 프로그램에는 예외를 처리할 수 있는 두 번째 기회가 제공됩니다.

  6. 디버그 중인 프로그램에 두 번째 예외에 대한 처리기가 없는 경우 DE는 IDebugExceptionEvent2를 SDM에 EVENT_SYNC_STOP으로 보냅니다.

  7. 디버그 패키지는 사용자에게 첫 번째 예외 대화 상자를 열어 예외를 처리하는 방법을 묻습니다.

  8. 디버그 패키지는 IDebugExceptionEvent2::CanPassToDebuggee를 호출하여 사용자에게 표시할 옵션을 결정합니다.

  9. 디버그 패키지는 사용자에게 두 번째 예외 대화 상자를 열어 예외를 처리하는 방법을 묻습니다.

  10. 메서드가 S_OK를 반환하면 IDebugExceptionEvent2::PassToDebuggee를 호출합니다.