반응형


Windows 7과 Vista에서 덤프파일  Windbg / 밥벌어먹고 살것들 

2012/01/14 12:52

복사http://blog.naver.com/backbjw88/40149508692


 덤프파일 이란?

- 윈도우의 커널 모드에서 문제가 발생하면 화면상에 Crash를 알리는 블루스크린이 뜨면서 해당 시스템 드라이브에 루트(c:\)에 페이지파일에 내용을 쓰게 된다. 이 파일을 재부팅할 때 memory.dmp 파일로 생성하는데 이를 덤프파일이라 부른다

  덤프 파일에는 Crash 당시 메모리 상태를 그대로 저장해 놓기 때문에 포스트모텀 디버깅으로 활용하여 같은 에러가 재차 발생하는 것을 막을 수 있다

 

최근의 노트북이나 데스크탑의 경우 메모리가 2GB가 넘는 경우가 많아 커널덤프와 미니덤프만 사용하게 되어있으며 미니덤프는 128KB의 크기를 가지며 레지스터, 콜 스택, 프로세스 정보, 스레드 정보, 오류가 발생한 시점에 접근했던 메모리 일부만을 저장한다

 

실제 커널자체의 에러가 아니라 어플리케이션에 의한 에러일 경우 전체 덤프가 필요할 경우엔 방법이 없을까?

paging파일의 크기를 메모리의 크기보다 크게 설정하면 된다

 - 고급 시스템 설정의 성능 -> 고급페이지에서 설정 한다

 

*minidump : c:\windows\minidump, kernel dump, 전체 덤프 : c:\windows\memory.dmp

(그림 1 - 윈도우 7의 메모리 덤프 설정 페이지 - 제어판 -> 시스템 -> 고급 시스템 설정 -> 시작 및 복구)

 

윈도우 7에서는 메모리 덤프 생성 조건이 세분화 되었다. 1 -> 4 까지 중첩 if 문이라고 생각하자

1. 레지스트리 AlwaysKeepMemoryDump 값이 1일 경우 : 무조건 메모리 덤프 생성

2. Windows 7과 Windows Server 2008 R2 이상 버전 일 경우 :  메모리 덤프 생성

3. 만약 Windows 7이상의 클라이언트가 도메인에 join 되어 있다면 :  메모리 덤프 생성 

4. 하드디스크에 25GB 이상의 여유공간이 있을 경우 : 메모리 덤프 생성

 

* 매번 덮어 씌워지는 커널 덤프와 달리 미니 덤프는 MiniMMDDYY-nn.dmp 형식으로 수 없이 생성 된다. Windows7 에서는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl 의 Minidumpcounts 에서 미니덤프의 최대 갯수를 설정 할 수 있도록 하였다



 


--------------------------------------------------------------------------------------------------

윈도우 XP : drwtsn32 명령어를 사용하면 Dr.Watson이라는 덤프파일 생성 프로그램을 관리할 수 잇다

윈도우 Vista에서는 Dr.Watson을 지원하지 않는다  -> Windbg 참고서에 나온 내용을 그대로 적겠다

 

1. WinDbg 설치

2. Regedit.exe 실행

3. HKEY_LOCAL_MACHINE\Software\Microsoft\windows NT\CurrentVersion\AeDebug를 찾는다

4. 문자열(REG_SZ) 타입으로 Debugger 키 값을 만든다

5. Debugger 키 값을 더블클릭하여 다음과 같이 기록한다

  c:\Debugging Tools for Windows\ntsd -p %ld -c ".dump /f /u c:\Temp\mydump.dmp;q"

6. 문자열(REG_SZ) 타입으로 Auto 키 값을 만든다

7. Auto 키 값을 더블클릭해 1을 기록한다

8. Regdit.exe를 닫는다

 

AeDebug 키를 이용해 응용프로그램에서 오류가 발생했을 때 ntsd를 해당 프로세스에 붙이고(attach) .dump 명령으로 c:\Temp 폴더에 덤프 파일을 생성하게 하는 것이다

 

-> 다만 윈도우서버 2008, 윈도우 비스타 SP1 이상부터는 자체적으로 덤프파일을 생성하는 기능이 추가 되었다

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps의 DumpFolder의 다음 레지스트리를 설정하면 작동한다

Value       / Type             / Default value

DumpFolder REG_EXPAND_SZ %LOCALAPPDATA%\CrashDumps

DumpCount REG_DWORD      10

DumpType   REG_DWORD      1(미니덤프, 2:전체덤프)

 

발췌 : WinDbg로 쉽게 배우는 Windows Debugging(김성현,이태화,김희준 지음)

--------------------------------------------------------------------------------------------------

 

 

반응형

+ Recent posts