본문 바로가기
OS/Windows

Windows 디버거를 사용하여 블루 스크린 문제 분석

by 헬로웬디 2024. 7. 21.

개요

컴퓨터 사용 중 갑작스럽게 발생하는 블루스크린 오브 데스(Blue Screen of Death, BSOD)는 사용자에게 큰 불편을 초래할 수 있습니다. 이 문제를 해결하기 위해 Windows 디버거를 사용하여 원인을 분석하고 문제를 해결하는 방법을 알아보겠습니다.

 

사전 구성

제어판 > 시스템 > 고급 시스템 설정을 클릭하면 시스템 속성 창이 열립니다. [고급] 탭으로 선택하고, [시작 및 복구] 섹션의 설정 버튼을 클릭하세요. 여기서 시스템 오류 발생 시 실행할 작업을 정의할 수 있습니다.

 

기본적으로 Windows 11은 시스템 오류가 발생하면 해당 이벤트를 이벤트 뷰어에 기록하고, 전제 메모리 덤프를 생성하여 %SystemRoot%MEMORY.DMP로 저장하고 있네요.

 

단계1: WinDbg 설치하기

1. Windows SDK를 다운로드 받아 설치합니다.

2. 기능 선택에서 Debugging Tools for Windows를 선택하고 계속 설치하세요.

3. C:\Program Files (x86)\Windows Kits\10\Debuggers\x64로 이동해서 windbg.exe를 클릭합니다.

 

단계 2: 덤프 파일 열기 및 분석 실행

1. WinDbg 실행 및 덤프 파일 열기

  • WinDbg 실행: 먼저 WinDbg를 시작합니다. 시작 메뉴에서 WinDbg를 검색하여 실행할 수 있습니다.
  • 덤프 파일 열기: WinDbg를 실행한 후, 상단 메뉴에서 File > Open Crash Dump를 클릭합니다.
  • memory.dmp 선택: 파일 탐색기에서 memory.dmp 파일을 찾아 선택하고 엽니다

 

2. 디버깅 심볼 설정

symfix 명령어 입력: kd(kernel debugger) 창에 .symfix 명령어를 입력합니다. 이 명령어는 WinDbg가 Microsoft 심볼 서버에서 필요한 디버그 심볼 파일을 자동으로 다운로드하게 합니다.

 

3. 덤프 파일 분석

!analyze -v 실행: kd 창에 !analyze -v 명령어를 입력하여 덤프 파일을 자세히 분석합니다. 이 명령어는 WinDbg가 스택 트레이스를 분석하고 오류의 원인과 관련된 정보를 제공합니다.

 

단계 3: 분석 결과 확인하기

1. Bugcheck Analysis항목을 찾아서 에러 코드를 확인합니다. DRIVER_POWER_STATE_FAILURE (9f) 에러가 블루스크린을 야기했었네요

 

2. 인터넷 검색을 해서 어떤 내용인 찾아보니, 다음과 같은 경우에 이러한 오류 메시지가 발생할 수 있다고 합니다.

  • 드라이버 문제: 특정 하드웨어 장치의 드라이버가 올바르게 전원 관리 상태를 처리하지 못할 경우 발생할 수 있습니다. 예를 들어, 드라이버가 장치를 슬립 모드로 전환하거나 깨우는 과정에서 오류가 발생할 수 있습니다.
  • 전원 관리 설정 문제: 시스템의 전원 관리 설정이 잘못된 경우에도 이 오류가 발생할 수 있습니다. 특히, 휴면 모드로 진입하거나 다시 활성화될 때 문제가 발생할 수 있습니다.
  • 하드웨어 충돌: 드문 경우지만, 시스템 하드웨어 간 충돌이나 호환성 문제로 인해 발생할 수 있습니다. 특히, 특정 하드웨어 장치가 전원 관리 상태 전환을 올바르게 지원하지 않을 때 발생할 수 있습니다.

3. 다음 FAILURE_BUCKET_ID 값, 0x9F_3_POWER_DOWN_ndiswan!ProtoUnbindAdapterExchat.gpt에서 찾아보았습니다.

0x9F: 이는 시스템 충돌과 관련된 버그 체크 코드입니다. 각 버그 체크 코드는 다양한 종류의 문제를 나타냅니다.

3_POWER_DOWN: 이 부분은 일반적으로 발생한 오류의 특정 유형을 나타냅니다. "POWER_DOWN"은 시스템이 절전 모드로 전환하려고 시도하였으나 그 과정에서 오류가 발생했음을 의미합니다.

ndiswan!ProtoUnbindAdapterEx: 이는 충돌이 발생한 모듈과 함수를 나타냅니다. 여기서는 ndiswan이라는 네트워크 연결과 관련된 시스템 드라이버의 ProtoUnbindAdapterEx 함수에서 문제가 발생했음을 의미합니다.

 

스택을 캡처해서 chat.gpt에게 다시 물어보았습니다.

주어진 스택 추적을 기반으로 판단하면, 시스템이 네트워크 어댑터를 저전력 상태로 관리하거나 전환하려고 시도할 때 충돌이 발생했을 가능성이 큽니다. 이는 ndiswan과 관련된 네트워크 어댑터에서 발생한 것으로 보이며, ndisPrepForLowPower, ndisSetSystemPower 등의 함수가 저전력 상태로 전환을 준비하는 과정에서 관련되었을 것으로 추정됩니다. ndiswan의 ProtoUnbindAdapterEx 함수는 저전력 준비 과정의 일환으로 네트워크 어댑터에서 프로토콜을 해제하는 작업에 관여했을 것으로 보입니다.

 

결론

에러 코드, FAILURE_BUCKET_ID, 그리고 스택 트레이스 통해 어떤 일이 발생했는지 가늠할 수 있었습니다. 이 오류는 주로 전원 관리 상태 전환 시 문제가 발생하여 네트워크 드라이버 전원 상태 전환 요청을 올바르게 처리하지 않았을 가능성이 큽니다. 아마도 절전 상태에서 무슨 일이 있었던 거 같은데, 시스템의 설정에 따라 BSOD 발생 시 자동으로 재시작되어 이런 사건이 있었는지도 인지하지 못했습니다. 

 

덤프 파일 분석은 실제 문제 해결 능력을 키우는 데 중요한 경험입니다. 추가적인 연습을 통해 더 많은 경우의 BSOD를 분석하고 해결하는 데 능숙해지시며 좋겠습니다.