다음을 통해 공유


소프트웨어 예외 발생

프로그램 오류의 가장 일반적인 원인 중 일부 예외 시스템에 의해 표시 됩니다지 않습니다.예를 들어, 메모리 블록을 할당 하려고 시도 하지만 메모리가 부족 한 경우 런타임 또는 API 함수 예외를 발생 시 키 지 않는 있지만 오류 코드를 반환 합니다.

그러나에서는 모든 조건을 예외 코드의 해당 조건을 검색 하 고 호출 하 여 보고 하 여 처리할 수 있습니다 해당 RaiseException 함수입니다.이 방법으로 오류를 표시 하 여 장점은 구조적 예외 처리 모든 종류의 런타임 오류를 가져올 수 있습니다.

구조적된 예외 처리와 오류를 사용 하는 방법

  • 예외 코드는 이벤트를 정의 합니다.

  • 호출 RaiseException 문제를 감지 합니다.

  • 예외 처리 필터를 사용 하 여 사용자 정의 예외 코드를 테스트할 수 있습니다.

WINERROR입니다.H 파일 형식에 대 한 예외 코드를 보여 줍니다.충돌 하는 기존 예외 코드를 코드 정의 하지 않도록 하려면 세 번째로 가장 중요 한 비트가 1로 설정 합니다.4 최상위 비트는 다음 표와 같이 설정 되어야 합니다.

비트

이진 권장된 설정

설명

31-30

11

이 2 비트 기본 상태 코드를 설명: 11 = 오류, 00 01 성공 = = 정보, 10 = 경고.

29

1

클라이언트 비트입니다.사용자 정의 코드를 1로 설정 합니다.

28

0

예약 된 비트입니다.(휴가 0으로 설정 합니다.)

원하는 경우 "오류" 설정은 대부분의 예외에 대 한 적절 한 있지만 첫 번째 두 비트 11 이외의 값으로 이진 설정 하면 있습니다.기억해 야 할 중요 한 점은 앞의 표에 나와 있는 것 처럼 28 및 29 비트를 설정 하는 것입니다.

결과 오류 코드는 16 진수 E에 설정 최상위 4 비트 따라서 있어야 합니다.예를 들어, 다음 정의 충돌 하지 않는 예외 코드는 Windows 예외 코드를 정의 합니다.그러나 (어떤 코드는 타사 Dll에서 사용 되 고 확인 하면 될 수도 있습니다.)

#define STATUS_INSUFFICIENT_MEM       0xE0000001
#define STATUS_FILE_BAD_FORMAT        0xE0000002

예외 코드를 정의한 후에 예외를 발생 시킬 수 있습니다.예를 들어, 다음 코드는 STATUS_INSUFFICIENT_MEM 예외에 대 한 응답으로 메모리 할당 문제가 발생합니다.

lpstr = _malloc( nBufferSize );
if (lpstr == NULL)
    RaiseException( STATUS_INSUFFICIENT_MEM, 0, 0, 0);

간단 하 게 예외를 발생 시키는 경우 마지막 세 개의 매개 변수를 0으로 설정할 수 있습니다.마지막 매개 변수에 추가 정보를 전달 하는 데 유용 하 고 플래그 설정 처리기 실행 계속할 수 없습니다.참조는 RaiseException 에서 작동의 Windows SDK 에 대 한 자세한 내용은.

예외 처리 필터에 다음에 대 한 정의 된 코드를 테스트할 수 있습니다.예를 들면 다음과 같습니다.

__try {
    ...
}
__except (GetExceptionCode() == STATUS_INSUFFICIENT_MEM ||
        GetExceptionCode() == STATUS_FILE_BAD_FORMAT )

참고 항목

참조

예외 처리기를 작성합니다.

구조적된 예외 처리 (C++)