Share via


WER 사용

Windows Vista부터 Windows는 기본적으로 애플리케이션을 변경하지 않고 크래시, 비응답 및 커널 오류 보고를 제공합니다. 필요한 경우 보고서에 미니덤프 및 힙 덤프 정보가 포함됩니다. 대신 애플리케이션은 WER API를 사용하여 애플리케이션 관련 문제 보고서를 Microsoft에 보냅니다.

Windows는 처리되지 않은 예외를 자동으로 보고하므로 애플리케이션에서 치명적인 예외를 처리해서는 안 됩니다. 오류 또는 응답하지 않는 프로세스가 대화형인 경우 WER은 사용자에게 문제를 알리는 사용자 인터페이스를 표시합니다. 사용자가 애플리케이션과 상호 작용을 시도하는 동안 5초 동안 Windows 메시지에 응답하지 않는 애플리케이션은 응답하지 않는 것으로 간주됩니다.

크래시, 비응답 및 커널 오류에 대한 Windows 오류 보고 흐름

다음은 애플리케이션 크래시, 비응답 또는 커널 오류에 대해 발생하는 단계를 보여줍니다.

  1. 문제 이벤트가 발생합니다.
  2. 운영 체제는 WER을 호출합니다.
  3. WER은 데이터를 수집하고, 보고서를 작성하고, 사용자에게 동의를 요청합니다(필요한 경우).
  4. WER은 사용자가 동의한 경우 Microsoft(Watson Server)에 보고서를 보냅니다.
  5. Watson 서버가 추가 데이터를 요청하는 경우 WER은 데이터를 수집하고 사용자에게 동의를 요청합니다(필요한 경우).
  6. 애플리케이션이 복구 및 다시 시작에 등록한 경우 데이터가 압축되어 Microsoft로 전송되는 동안(사용자가 동의한 경우) WER에서 등록된 콜백 함수를 실행합니다.
  7. Microsoft에서 문제에 대한 응답을 사용할 수 있는 경우 사용자에게 알림이 표시됩니다.

애플리케이션은 다음 함수를 사용하여 Microsoft로 전송되는 보고서의 내용을 사용자 지정할 수 있습니다. 등록 함수는 WER이 만드는 오류 보고서에 특정 파일 및 메모리 블록을 포함하도록 지시합니다.

제네릭 이벤트 보고를 위한 Windows 오류 보고 흐름

다음 단계에서는 애플리케이션이 치명적이 아닌 오류 조건에 대한 오류 보고서를 가져오는 방법을 보여 줍니다.

  1. 치명적이 아닌 문제 이벤트가 발생합니다.
  2. 애플리케이션은 이벤트를 인식하고 다음 일련의 함수 호출을 사용하여 보고서를 생성합니다.
    1. WerReportCreate 함수를 호출하여 보고서를 만듭니다.
    2. WerReportSetParameter 함수를 호출하여 보고서 매개 변수를 설정합니다.
    3. WerReportAddFile 함수를 호출하여 보고서에 파일을 추가합니다.
    4. WerReportAddDump 함수를 호출하여 보고서에 미니덤프를 추가합니다(필요한 경우).
    5. WerReportSubmit 함수를 호출하여 보고서를 보냅니다.
    6. WerReportCloseHandle을 호출하여 리소스를 해제합니다.
  3. 2단계에서 함수를 호출할 때 사용되는 특정 옵션에 따라 WER은 오류 보고를 완료합니다. WER은 사용자가 설정한 정책에 따라 보고가 수행되도록 합니다. 예를 들어 WER은 보고서를 Microsoft로 보내고, 보고서를 큐에 대기시키고, 사용자에게 적절한 사용자 인터페이스를 표시합니다.

Windows 오류 보고 애플리케이션 제외

Windows 오류 보고에서 애플리케이션을 제외하려면 WerAddExcludedApplication 함수를 사용합니다. 애플리케이션에 대한 오류 보고를 복원하려면 WerRemoveExcludedApplication 함수를 사용합니다.

자동으로 데이터 복구 및 오류 애플리케이션 다시 시작

애플리케이션은 처리되지 않은 예외로 인해 또는 애플리케이션이 응답을 중지할 때 애플리케이션이 종료되기 전에 Application Recovery 및 Restart를 사용하여 데이터 및 상태 정보를 저장할 수 있습니다. 요청된 경우 애플리케이션도 다시 시작됩니다. 자세한 내용은 Application Recovery 및 Restart를 참조하세요.

레거시 API

애플리케이션은 ReportFault 함수를 호출하여 오류를 보고할 수 있습니다. 그러나 운영 체제의 기본 오류 보고 동작이 충족할 수 없는 매우 구체적인 요구 사항이 없는 한 ReportFault 함수를 사용하면 안 됩니다.

오류 보고를 사용하도록 설정하면 시스템에서 애플리케이션에 문제가 발생하여 닫히게 됨을 나타내는 대화 상자를 사용자에게 표시합니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug 키에 구성된 디버거가 있는 경우 사용자에게 디버거를 시작할 수 있는 옵션이 제공됩니다. 또한 사용자에게 Microsoft에 보고서를 보낼 수 있는 옵션도 제공됩니다. 사용자가 보고서를 보내면 시스템에 보고서에 대해 사용자에게 감사하고 추가 정보에 대한 링크를 제공하는 다른 대화 상자가 표시됩니다.

오류 보고 시스템은 다음 작업 모드를 지원합니다.

작업 모드 설명
공유 메모리 보고 애플리케이션의 보안 컨텍스트가 로그온한 사용자의 보안 컨텍스트와 동일한 경우 오류 보고 시스템은 통신을 위해 공유 메모리 블록을 사용합니다. 매니페스트 보고 모드에서는 이 모드를 사용할 수 없습니다.
매니페스트 보고 애플리케이션의 보안 컨텍스트가 로그온한 사용자의 보안 컨텍스트와 동일하지 않은 경우 오류 보고 시스템은 통신을 위해 파일을 사용합니다. 이 모드는 응답하지 않는 애플리케이션 및 커널 오류를 보고하는 데도 사용됩니다. 이 모드는 공유 메모리 보고 모드에서 사용할 수 없습니다.
인터넷 보고 오류 보고 시스템은 인터넷을 통해 모든 데이터를 Microsoft로 보냅니다. 기본 작업 모드입니다. 회사 보고 모드에서는 사용할 수 없습니다. 이 모드는 관리자가 지정한 회사 업로드 경로가 없는 경우에 사용됩니다.
회사 보고 오류 보고 시스템은 모든 데이터를 Microsoft에 직접 업로드하는 대신 파일 공유로 보냅니다. 이를 통해 회사 IT 관리자는 Microsoft로 전송되기 전에 데이터를 검토할 수 있습니다. 이 모드는 관리자가 지정한 회사 업로드 경로가 있는 경우에 사용됩니다. 인터넷 보고 모드에서는 사용할 수 없습니다.
헤드리스 보고 오류 보고 시스템은 사용자에게 대화 상자를 표시하지 않습니다. 이를 통해 기업 IT 관리자는 항상 직원으로부터 오류 보고서를 수집할 수 있습니다. 이 모드는 관리자가 보고할 때 사용되지만 알림은 사용하지 않도록 설정됩니다. 회사 보고 모드에서만 사용할 수 있습니다.

오류 보고에서 애플리케이션을 제외하려면 AddERExcludedApplication 함수를 사용합니다.