레이블이 bluescreen인 게시물을 표시합니다. 모든 게시물 표시
레이블이 bluescreen인 게시물을 표시합니다. 모든 게시물 표시

2010년 2월 27일 토요일

윈도우 블루 스크린 (2) - Windbg

 앞서 블루 스크린의 원인 분석 시, Nirsoft에서 만든 간단한 Blue Screen view tool을 소개하였습니다. 이제 마이크로소프트사에서 제공하는 Windbg에 대한 글입니다.

 

 Windbg는 원래 Windows NT 때부터 블루 스크린 문제나 장치 드라이버 문제의 원인을 파악하기 위한 목적으로 마이크로소프트에서 제공하던 툴인데, Windows 2000, Windows XP, Vista, Windows 7까지 계속 이어져 오고 있습니다. Windbg에 대한 정보 및 필요한 도구들을 다운로드 받기 위해서는  "Debugging Tools for Windows"라는 마이크로소프트 사이트를 방문하십시오. 그리고 여기서 블루 스크린이 발생한 Windows 버전의 SymbolDebugging tool을 다운로드 받아서 설치합니다. Debugging tool을 설치하면 Windbg 프로그램이 설치됩니다.

 

 또한 블루 스크린이 발생하면 자동으로 시스템 재시작이 되어 버립니다. [시스템 등록 정보]의 [시작 및 복구]-[설정]에서 '자동으로 다시 시작' 옵션을 끄(Off) 주십시오. 또한 블루 스크린 발생 시 %Windir%\Minidump에 .dmp 파일이 생겼는지도 확인하십시오.

 

 문제가 발생한 시스템에 Symbol과 Debugging tool을 설치하는 방법도 있으나, 미리 설치된 시스템으로 .dmp 파일을 가져와서 디버깅 작업을 하는 것도 가능합니다.

 

 이제 Windbg 프로그램에서 Symbol 파일을 사용하여 Dump(.dmp) 파일을 불러오는 과정입니다.

 

1. 먼저 아래 그림과 같이 Symbol 파일을 사용할 수 있도록 설정합니다. [File] - [Symbol file path]를 선택한 후 다운받아 설치된 Symbol파일의 경로를 설정합니다.

기본 경로는 C:\Windows\Symbols입니다.

 

2. 다음으로 Dump 파일을 불러옵니다. [File] - [Open Crash Dump]를 선택하여 C:\windows\minidump\*.Dmp파일을 선택합니다.

 

 3. 그리고 불러온 dmp파일을 분석할 수 있도록 !analyze -v 항목을 클릭합니다.

 

 4. 분석된 항목에 대한 IMAGE_NAME 항목을 확인해 보면, 블루 스크린의 원인이 된 드라이버 파일을 확인할 수 있습니다.

 

 Debugging tool 설치 및 사용 방법에 대한 좀 더 자세한 내용은 "Debugging Tools and Symbols: Getting Started"을 참조하십시오.

 

[관련글]

 

 

2010년 2월 26일 금요일

윈도우 블루 스크린 (1) - Blue Screen View

 먼저 Nirsoft에서 만든 간단한 Blue Screen view를 소개합니다.

설치할 필요 없이, 블루 스크린 발생 후에 간단히 블루 스크린의 원인을 확인하거나

블루 스크린 발생 시의 화면을 볼 수 있는 툴입니다.

 

 마이크로소프트의 Windbg 보다는 제공 기능이 단순하지만 별도 설치할 필요가 없으며, BlueScreenView.exe만 실행하면 바로 블루 스크린의 원인 확인이 가능합니다.

프로그램을 실행하면, %windir%\Minidump 폴더에 저장된 .dmp 파일들을 로딩합니다.

만약 다른 시스템으로부터 .dmp를 가져와서 봐야할 경우에는 [고급 옵션] 버튼을 눌러 .dmp 파일이 있는 폴더를 지정해 주면 됩니다.

 

 

 또한, 메뉴에서 [옵션] 버튼을 누르면 아래와 같이 .dmp 파일 분석 결과를 보는 옵션을 선택할 수 있습니다.

 

 

 

 

 

[인용글: Blue Screen View 한글판 ]

 

[관련글: 윈도우 블루 스크린 (2) - Windbg ]

2010년 2월 5일 금요일

Win7 메모리 덤프(Dump) 생성 과정 변경

[출처: 윈도우 7 메모리 덤프 생성 과정 변경 ]

 

 Windows 7에서는 메모리 덤프(Memory dump) 생성 과정이 변경되었습니다.

 

메모리 덤프는 다음 블루 스크린과 같은 시스템 오류가 발생하면 생성됩니다.

clip_image002

[블루스크린 화면] 블루스크린이 왜 파란색인지 궁금하시면 여기를 클릭하세요.

 

 우선 블루스크린이란 윈도우의 커널 모드에서 문제(Crash)가 발생하면 화면 상에 Crash가 발생했음을 알리는 것이며, 시스템 드라이브(보통 C 드라이브 루트 폴더)에 있는 페이지파일(pagefile.sys) 파일에 메모리 내용을 쓰게 됩니다. 그 뒤에 부팅하면서 덤프가 저장된  pagefile.sys 부터 C:\Windows 폴더에 메모리 덤프 파일인 memory.dmp를 생성합니다.

블루스크린이 발생 시, 숫자가 1%에서 100%까지 옮겨 가는 것을 볼 수 있는데, 이것이 바로 메모리에 있는 데이터를 하드디스크에 있는 Pagefile.sys에 옮기는 과정을 나타내는 것 입니다.

 

image

[메모리에서 Memory.dmp로 가는 과정]

 

 윈도우에서는 어떤 작업을 하기 위해서는 실행 데이터가 메모리에 올라와 있어야 하는데 이 때문에 memory.dmp에는 당시 윈도우가 문제 시점에서 어떤 일들이 벌어 지고 있는지를 확인할 수 있는 아주 중요한 단서를 가지고 있습니다. 그래서 이 memory.dmp 파일을 분석하여 문제(Crash)가 발생한 원인을 찾을 수 있습니다.

 

clip_image004

[WinDBG를 이용해 디버깅 하는 화면]

 

 덤프의 종류에는 메모리에 있던 모든 내용을 모두 dump하는 전체덤프(Complete dump), 메모리에서 커널(Kernel) 관련 내용만 dump하는 커널덤프(Kernel dump), 그리고 덤프에 대한 간략한 정보만을 담은 작은 메모리 덤프(Mini dump)가 있습니다. 만약, 시스템 메모리가 2GB를 넘어가면 아래 그림에서처럼 전체덤프 옵션은 사라지고, 커널덤프와 미니덤프만 남습니다. 그러나 사용자가 필요하다면 레지스트리 변경으로 전체덤프 생성이 가능합니다.

 

 시스템 Crash(블루스크린이 나타난 경우)가 발생한 경우 대부분 커널덤프로 분석하지만(당연히 Kernel에서 문제가 발생했으므로), 경우에 따라서는 Application Mode가 커널모드(Kernel Mode)에 영향을 주어 시스템 Crash를 야기하는 경우에는 극히 드물지만 전체 덤프가 필요한 경우가 있습니다. 

 

image

 

 만약 덤프의 유형이 ‘전체 덤프’로 설정 되어 있으면 ‘실제 페이지 파일(Pagefile.sys) 크기 + 300MB’의 크기의 memory.dmp 파일이 생성 되는데, 요즘 대부분의 PC나 노트북의 경우 2GB 정도의 메모리가 기본으로 장착 되어 있기 때문에 2GB의 메모리가 있다면 2.3GB 정도의 memory.dmp 파일이 생성 됩니다. 아무리 요즘 하드디스크가 대용량화 되었다고 해도 이런 크기는 무시 못할 것입니다. 때문에 Windows 7에서부터는 하드디스크의 부담을 줄이고자 메모리 전체 덤프와 커널덤프 파일 생성 여부를 아래와 같이 변경 하였습니다.

 

image

[메모리 덤프 생성 여부 순서도]

 

 위 순서도의 결론은 25GB 이상의 여유 공간이 존재 하지 않는 한 메모리 덤프를 생성하지 않는다는 것입니다. 이것은 하드디스크의 공간이 충분하지 않은 상태에 Memory.dmp 파일이 생성되어 시스템 리소스를 차지 하는 것을 막겠다는 의도 입니다.

 

위 표를 정리하면 다음과 같습니다.

 

① 먼저 레지스트리 AlwaysKeepMemorydump값이 1로 되어 있으면 무조건 메모리 덤프 파일을 생성합니다. 경로는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl 입니다. 기본적으로는 없는 값이므로 필요할 경우 만들어야 합니다.

 

② 만약 Windows가 Windows Server 2008 R2 이상이면 무조건 메모리 덤프 파일을 생성합니다. 그리고 Windows 7과 Windows Server 2008 R2는 동일한 커널을 가지고 있으므로, Windows7에도 동일합니다.

 

③ 만약 Windows 7 이상 클라이언트가 도메인에 Join 되어 있다면 무조건 메모리 덤프 파일을 생성한다. 도메인에 Join되어 있다는 의미는 기업 고객일 가능성이 높고, 고객 기업이라면 덤프 발생시 클라이언트라도 덤프 분석이 필요한 가능성이 높기 때문입니다.

 

④ 도메인에 Join 되어 있지 않다면 하드디스크의 여유 공간이25GB 이상인지 확인 한다, 만약 25GB 이상이면 메모리 덤프 파일을 생성 하지만, 그렇지 않다면 생성하지 않습니다.

 

 이제 미니덤프(Minidump)에 대해 알아봅니다. 이전에는 시스템 Crash가발생할 때마다 Minidump폴더(보통 C:\Windows\Minidump)에 MiniMMDDYY-nn.dmp 파일(MMDDYY는 월/일/연도) 이름 형식으로 미니덤프가 쌓였었습니다. 미니덤프와 다른 덤프의 차이점은 크기가 작다는 점 이외에, 다른 덤프들은 덤프 발생 시 이전에 있던 memory.dmp위에 덮어 씀으로써(Overwrite) 복수의 덤프 파일이 생성되지 않습니다.

 

 하지만, 미니 덤프파일의 경우 계속해서 발생일 표시인 MMDDYY과 뒤에 nn의 이름을 바꿔가며 생성됩니다. 그래서 Windows 7부터는 레지스트리 MinidumpsCount 값으로 최대로 만들어 질 수 있는 미니덤프 값을 조정할 수 있게 되었습니다. MinidumpsCount는 레지스트리 경로는 아래와 가으며, 기본 50개로 설정되어 있습니다.

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl