[실전 윈도우 디버깅] 13 포스트모템 디버깅

26
ohyecloudy http://ohyecloudy.com 아꿈사 http://cafe.naver.com/architect1.cafe 2009.10.17

Transcript of [실전 윈도우 디버깅] 13 포스트모템 디버깅

Page 2: [실전 윈도우 디버깅] 13 포스트모템 디버깅

고객의 정책, 환경 문제로 실시간 접근이 불가능 할 때

실패 시점에 시스템 상태 스냅샷을 만들어서 분석한다.

덤프 파일

Page 3: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 기본 덤프 파일 생성

덤프 파일 사용

윈도우 오류 보고

Page 4: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 종류

풀full 덤프

프로세서 실행 이미지

핸들 테이블

디버거가 사용하는 기타정보

데이터 양을 조절할 수 없다.

미니mini 덤프

커스터마이즈가 가능하다.

Page 5: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 생성 툴

- 윈도우 디버거

- ADPlus

- WER Window Error Report

- CER Corporate Error Reporting

Page 6: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 기본 덤프 파일 종류, 생성 툴

덤프 파일 생성 덤프 파일 사용

윈도우 오류 보고

Page 7: [실전 윈도우 디버깅] 13 포스트모템 디버깅

void __cdecl wmain()

{

WCHAR* pszTitle=L”Advanced Windows Debugging”;

wprintf(L”Press any key to start\n”);

WCHAR* pBuffer=(WCHAR*)new WCHAR[wcslen(pszTitle)+1];

if (pBuffer)

{

StringCchCopy(

pBuffer, wcslen(pszTitle)+1, pszTitle);

wprintf(L”Title: %s\n”, pBuffer);

pBuffer = NULL;

*pBuffer = ‘\0’;

}

else

{

wprintf(L”Failed to allocate memory\n”);

}

wprintf(L”Press any key to end\n”);

__getch();

}

Page 8: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 생성, 로드

데모

덤프 파일 생성 스크릮캐스트 : http://screencast.com/t/nkXLVNjv 생성한 덤프 로드 스크릮캐스트 : http://screencast.com/t/QRL0uDMgY

Page 9: [실전 윈도우 디버깅] 13 포스트모템 디버깅

포스트모템 디버거

프로세스가 크래시될 때마다

윈도우가 디버거를 사용해

덤프 파일을 생성하게 하는 메커니즘

Page 10: [실전 윈도우 디버깅] 13 포스트모템 디버깅

포스트모템 디버거 설정

HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows NT\ CurrentVersion\AeDebug windbg.exe –p %ld –e %ld –g

-p %ld : 연결할 프로세스 -e %ld : 연결이 완료될 때 시그널되는 이벤트 -g : 연결할 때 발생하는 최초 디폴트 중단점을 무시

Page 11: [실전 윈도우 디버깅] 13 포스트모템 디버깅

VS JIT 디버거

Page 12: [실전 윈도우 디버깅] 13 포스트모템 디버깅

ADPlus

adplus.vbs -crash -pn awdscenario1.exe -y SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols

Page 13: [실전 윈도우 디버깅] 13 포스트모템 디버깅

ADPlus(계속)

자동으로 덤프 파일 생성.

FullOnFirst

MiniOnSecond

NoDumpOnFirst

NoDumpOnSecond

Page 14: [실전 윈도우 디버깅] 13 포스트모템 디버깅

커널덤프

제어판 > 시스템 > 고급 > 시작 및 복구

Page 15: [실전 윈도우 디버깅] 13 포스트모템 디버깅

커널 덤프 종류

젂체 메모리 덤프 - 모든 물리 메모리 포함

- 젂체 RAM보다 1MB 큰 파일을 저장할 공간 필요

커널 메모리 덤프 - 시스템 물리 메모리 1/3

- 윈도우 커널, HAL, 커널 모드 드라이버…

작은 메모리 덤프minidump

- 64KB, 덤프 파일 공간이 제한되어 있을 때 유용.

- 프로세서 컨텍스트, 커널 컨텍스트, 호출 스택…

Page 16: [실전 윈도우 디버깅] 13 포스트모템 디버깅

수동으로 크래시 덤프 파일 생성

HKEY_LOCAL_MACHINE\ system\ CurrentControlSet\ Services\ i8042prt\Parameters <CrashOnCtrlScroll, REG_DWORD 0x1>

오른쪽 CTRL + SCROLL LOCK을 두번 누르면 크래시

PS2 키보드

Page 17: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 기본 덤프 파일 종류, 생성 툴

덤프 파일 생성 덤프 생성 데모, 포스트모템 디버거, ADPlus, 커널 덤프

덤프 파일 사용 윈도우 오류 보고

Page 18: [실전 윈도우 디버깅] 13 포스트모템 디버깅
Page 19: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 분석 :

접근 위반, 핸들 누수

데모 접근 위반 분석 스크릮캐스트 : http://screencast.com/t/3j1AEyix5J0 핸들 누수 덤프 생성 스크릮캐스트 : http://screencast.com/t/EfQReO9n 핸들 누수 덤프 분석 스크릮캐스트 : http://screencast.com/t/5mYX8tscYG

Page 20: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 기본 덤프 파일 종류, 생성 툴

덤프 파일 생성 덤프 생성 데모, 포스트모템 디버거, ADPlus, 커널 덤프

덤프 파일 사용 접근 위반, 핸들 누수 덤프 파일 분석 데모

윈도우 오류 보고

Page 21: [실전 윈도우 디버깅] 13 포스트모템 디버깅

Dr.Watson

WER Window Error Report 서비스에 보낼 수 있는 오류 보고 정보를 생성

- 예외 섹션

- 시스템 정보

- 작업 목록

- 모듈 목록

- 쓰레드 상태 덤프

- 스택 역추적

- 로raw 스택 덤프

Page 22: [실전 윈도우 디버깅] 13 포스트모템 디버깅

윈도우 오류 보고 아키텍처

프로세스 X가 크래시 Dr.Watson UI 표시 “보내기”를 클릭

크래시 데이터를 관리 (질의, 피드백 루프 제공…) ISV

사용자

WER

크래시

데이터

폴트

대응

크래시 데이터가 있는지 주기적으로 질의

피드백 루프로 사용할 수 있는 수정을 제공

Page 23: [실전 윈도우 디버깅] 13 포스트모템 디버깅

윈도우 오류 보고

크래시 덤프 및 오류 보고를 대신 수집,

관리해준다.

등록 젃차 - 사용자 계정, 회사 계정 생성

- 무료

책 664 참고

Page 24: [실전 윈도우 디버깅] 13 포스트모템 디버깅

기업 오류 보고

오류 보고를 지역적으로 보관할 수 있다.

- MS로 덤프, 오류 보고를 선택해서 보낼 수 있다.

- 보안에 민감한 부분

책 683 참고

Page 25: [실전 윈도우 디버깅] 13 포스트모템 디버깅

덤프 파일 기본 덤프 파일 종류, 생성 툴

덤프 파일 생성 덤프 생성 데모, 포스트모템 디버거, ADPlus, 커널 덤프

덤프 파일 사용 접근 위반, 핸들 누수 덤프 파일 분석 데모

윈도우 오류 보고 Dr.Watson, WER, CER

Page 26: [실전 윈도우 디버깅] 13 포스트모템 디버깅