2. 1. 윈도우 에러 보고 콘솔
• 프로세스가 처리되지 않은 예외로 인해 종료된 경우, WER은 처리되지 않은
예외와 당시의 컨텍스트 정보를 보고서로 생성한다.
• 생성된 보고서는 사용자의 동의하에 안전한 채널을 통에 MS서버로
전송된다.
• 전송된 보고서 내용을 근간으로 이미 알려진 애플리케이션 실패 데이터
베이스에 저장된 내용을 검색하고, 만일 데이터베이스 내에
애플리케이션의 실패사항을 해결할 수 있는 해결책이 있는 경우라면
사용자가 어떤 작업을 해야만 정상적으로 작업을 수행할 수 있는지를
알려준다.
3. 2. 프로그램적으로 윈도우 에러 보고하기
kernel32. dll 에서 익스포트하고 werapi.h 에서 정의하고
있는 다음 함수를 이용하면 프로세스에 대한 여러가지
옵션을 변경할 수 있다.
WER 함수를 통해 설정한 내용보다 현 재 설정 정보가
우선하기 때문에 사용자(혹은 머신 관리자)의 동의 없이
애플리케이션 내에서 임의로 보고서를 전송할 수 있는
방법은 없다.
4. 2. 프로그램적으로 윈도우 에러 보고하기
보고서 생성과 전송 금지하기.
• 애플리케이션이 실패했을 때 WER이 보고서 생성과
전송을 수행하지 못하도록 할 수 있다. 이러한 기능은
애플리케이션을 출시하거나 배포하기에 앞서 개발 단계
혹은 테스트 단계에서 유용하게 사용 된다고 한다.
해당 함수를 통해 보고서의 생성과 전송을 막을 수 있다.
• 기능이 차단된 상태에서도 나머지 두 가지 선택의 여지를
가진다.
• 이 두개의 기능은 wer.dll이 익스포트 하고 있으며
werapi.h 파일에 선언되어 있다.
5. 3. 프로세스 내에서 사용자 정의 문제 보고서 생성하기
• 자체적으로 처리되지 않은 예외 필터를 작성한다.
• 처리되지 않은 예외가 발생하지 않은 경우에도 보고서를
생성하도록 애플리케이션을 개발한다.
• 보고서에 추가적인 정보를 담고자 한다.
때로는 다양한 WER 함수를 활용하여 애플리케이션에서 사용자 정의 문제
보고서를 생성하고 싶을 수도 있다.
세가지 상황을 예로 든다.
6. 3. 프로세스 내에서 사용자 정의 문제 보고서 생성하기
문제 보고서를 수정하는 가장 간단한 방법은 생성된 문제 보고서에 특정 데이터
블록을 추가하거나 임의의 파일을 추가하는 것이다.
데이터 블록을 추가하고 싶은 경우라면 다음 함수를 호출하면 된다.
문제 보고서가 생성될 때마다 이 영역의 데이터 블록이 minidump 파일 내에 저장될
것이며, 사후 디버깅을 수행할 때 저장된 값을 확인해 볼 수 있다.
WerRegisterMemoryBlock 함수를 여러 변 호출하면 minidump 파일에도 여러 번에 걸쳐
데이터가 쓰여진다는 것을 명심해야 한다.
7. 3. 프로세스 내에서 사용자 정의 문제 보고서 생성하기
문제 보고서에 임의의 파일을 추가하고 싶다면 WerRegisterFile 함수를 호출하면
된다.
이제 문제가 발생하면 등록해 둔 파일이 보고서 내에 저장된다. 여러 개의 파일을 보고서
내에 포함 시키려면 WerRegisterFile을 여러 번 호출해 주면 된다.
또한 다음의 두 가지 함수 중 하나를 호출하여 등록하였던 데이터 블록이나 파일을
등록 해제할 수 있다.
8. 4. 사용자 정의 문제 보고서 생성과 변경
사용자 정의 문제 보고서 생성하기 : WerReportCreate
사용자 정의 보고서를 생성하기 위해서는 보고서에 대한 세부 정보를 인자로
WerReportCreate 함수를 호출하면 된다.
pwzEventType은 유니코드로 구성된 문자열로, 문제 서명영역의 첫 번째 행에 나타난다.
만일 윈도우 품질 웹 사이트를 통해 문제 보고서를 확인하려 한다면 반드시 마이크로소프트가 등록해
둔 이벤트 타입을 사용해야 한다고 한다.
9. 4. 사용자 정의 문제 보고서 생성과 변경
문제 보고서에 세부 정보 설정하기: WerReportSetParameter
문제 서명 영역의 문제 이벤트 이름과 OS버젼, Locale ID 사이에 다음 함수를
이용하여 키/값 으로 구성되어 있는 값들을 설정할 수 있다.
.이 함수를 이용하 면 10 개의 키/값 쌍을 지정할 수 있는데,이 값으로는 WER_P0부터 WER_P9로 정의
되어 있는 매크로를 사용해야 한다.(werapi.h 파일 내에 정의되어 있음)
10. 4. 사용자 정의 문제 보고서 생성과 변경
문제 보고서에 미니 덤프 추가하기: WerReportAddDump
문제 보고서를 생성할 때 WerReportAddDump 함수를 호출하면 미니 덤프 파일을
보고서에 추가할 수 있다.
11. 4. 사용자 정의 문제 보고서 생성과 변경
다이얼로그 박스의 문자열 수정 : WerReportSetUIOption
문제 보고서를 생성할 때 WerReportAddDump 함수를 호출하면 미니 덤프 파일을
보고서에 추가할 수 있다.
12. 4. 사용자 정의 문제 보고서 생성과 변경
문제 보고서 전송하기: WerReportSubmit
문제 보고서를 전송하려면 다음과 같은 함수를 사용한다.
• HRSULT 반환 값을 통해서 보고서 전송의 성공 실패 여부를 알 수 있지만
WER_SUBMIT_RESULT를 가리키는 pSubmitResult 변수를 통해서 더 정확한 결과를 알 수 있다.
• pSubmitResult가 가리키는 값을 통해 성공 여부를 확인할 수 없는 유일한 경우는 dwFlags 값이
WER_SUBMIT_OUTOFPROCESS_ASYNC 플래그를 포함하는 경우인데, 이 플래그를 지정하면
보고서에 대한 처리가 완료되기 전에 WerReportSubmit 함수가 반환되어 버리기 때문이다.
때문에 이 플래그는 매우 조심스럽게 사용해야 하고, 처리되지 않은 예외 상황에서는 절대로
사용해서는 안 된다. 그 이유는 보고서 관련 정보가 수집되어 전송되기 전에 프로세스가 종료되어
버리기 때문이다. 이 플래그는 예외상황이 아니어서 보고서 전송이 완료될 때까지 기다리고 싶지
않을 경우에만 용해야 한다.
13. 4. 사용자 정의 문제 보고서 생성과 변경
문제 보고서 닫기: WerReportCloseHandle
보고서 전송이 완료되면 보고서와 관련된 내부 데이터 구조체들을 해제하기 위해
보고서 핸들을 인자로 WerReportCloseHandle 함수를 호출하는 것을 잊어서는 안
된다.