커널 라이브 덤프 코드 참조
이 섹션에는 발생할 수 있는 일반적인 커널 라이브 덤프 코드에 대한 설명이 포함되어 있습니다. 라이브 덤프는 OS를 다시 설정하지 않지만 운영 체제가 계속될 수 있는 비정상적인 상황에서 메모리 정보를 캡처할 수 있습니다.
참고 항목
이 항목은 프로그래머를 위한 것입니다. 시스템에 버그 확인 코드가 있는 파란색 화면이 표시된 고객인 경우 파란색 화면 오류 문제 해결을 참조 하세요.
버그 검사에 비해 커널 라이브 덤프
기존 버그 검사를 사용하면 PC가 다시 설정되고 사용자의 작업이 중단됩니다. 커널 라이브 덤프의 목표는 비정상적인 상황을 촬영하기 위해 데이터를 수집하지만 OS가 작업을 계속할 수 있도록 하는 것입니다. 이렇게 하면 "치명적이지 않은" 버그 검사와 비교했을 때 가동 중지 시간이 줄어들지만 영향이 큰 오류 및 중단이 발생합니다. 커널 라이브 덤프는 OS를 알려진 정상 상태로 복구할 수 있을 때 사용됩니다. 예를 들어 비디오/디스플레이, USB3 또는 Wi-Fi와 같은 하위 시스템의 하드웨어 재설정을 통해 해당 시스템이 사용자에게 미치는 영향을 최소화하면서 알려진 정상 상태로 돌아갈 수 있습니다.
커널 라이브 덤프는 커널 메모리의 일관된 스냅샷을 만들고 향후 분석을 위해 덤프 파일에 저장합니다. 성능에 미치는 영향을 최소화하기 위해 메모리 복사 기술을 사용하여 짧은 시간 안에 덤프 파일을 만듭니다. 또한 라이브 덤프의 컬렉션이 제한되므로 사용자 영향이 최소화됩니다.
커널 라이브 덤프는 시간이 오래 걸리고 기술적으로 실패하지 않는 문제 범주에 효과적입니다. 작업이 시작될 때 Watchdog 타이머를 초기화할 수 있습니다. 예상 시간에 작업이 완료되기 전에 Watchdog가 만료되면 시스템의 라이브 덤프를 사용할 수 있습니다. 그런 다음, 호출 스택 및 관련 대기 체인을 트래버스하여 덤프를 분석하여 예상 시간 프레임으로 완료되지 않는 이유를 조사할 수 있습니다.
시스템 로그는 오류가 발생하고 코드 소유자 오류의 원인을 기록하고 원인을 식별할 수 있을 때 잘 작동합니다. Watchdog 타이머를 사용하는 라이브 덤프는 예상되지 않고 기록되지 않은 실패 경로를 catch하려고 시도합니다. 그러나 모든 오류와 마찬가지로 시스템 로그는 오류의 특정 근본 원인에 대한 단서를 제공할 수 있는 다른 문제를 식별할 수 있습니다.
커널 라이브 덤프 파일 콘텐츠
일반 덤프 파일과 마찬가지로 라이브 덤프 파일에는 활성 덤프와 유사한 사용자 모드 메모리를 포함할 수 있는 미니덤프(보조 데이터 포함) 및 전체 커널 덤프가 포함될 수 있습니다. 덤프 파일 내용에 대한 일반적인 내용은 커널 모드 덤프 파일의 품종을 참조 하세요. 일부 라이브 덤프는 특정 하드웨어 관련 데이터를 캡처하도록 설계되어 있으므로 미니덤프만 캡처하려고 시도하는 반면, 다른 덤프는 더 큰 커널 라이브 덤프를 캡처하려고 시도할 수 있습니다.
성능, 파일 크기 및 덤프 캡처의 안정성을 위해 대기 목록 및 파일 캐시의 페이지와 같은 일부 정보는 포함되지 않습니다.
라이브 덤프 파일은 일반적으로 다음과 같은 메모리 페이지를 포함합니다.
- KdDebuggerBlock
- 로드된 모듈 목록
각 프로세서에 대해 커널 덤프에 다음 정보가 캡처됩니다.
- KiProcessorBlock
- PRCB
- 현재 스택
- 현재 페이지 디렉터리 테이블
- KI_USER_SHARED_DATA
- NTOS 커널 이미지
- HAL 이미지
커널 덤프의 추가 정보에는 다음이 포함될 수 있습니다.
- 스레드/메모리 상태
- 메모리 내 로깅
일부 라이브 덤프에는 사용자 모드 프로세스 페이지가 포함될 수 있습니다.
USB 오류에 대한 USB 특정 데이터와 같은 추가 도메인 관련 데이터는 일부 라이브 덤프에 포함될 수 있습니다.
부분 커널 라이브 덤프 파일
라이브 덤프가 의도한 모든 메모리 페이지를 안정적으로 캡처할 수 없는 경우 부분 커널 라이브 덤프 파일이 생성될 수 있습니다. 부분 덤프에서 캡처되는 정보는 다른 페이지 앞에 유효한 덤프를 생성하는 데 필요한 중요한 데이터가 포함된 페이지를 캡처하여 필터링 및 우선 순위를 지정합니다. 예를 들어 커널 페이지는 라이브 덤프에 사용자 페이지가 포함된 경우 사용자 페이지보다 우선 순위가 지정됩니다. 일부 경우에는 의도한 모든 선택적 메모리 페이지를 캡처하는 데 사용할 수 있는 리소스가 충분하지 않으므로 덤프 파일에서 메모리가 누락될 수 있습니다. 덤프 파일은 WinDbg 디버거에서 계속 인식해야 하지만 메모리 덤프를 시도할 때 오류가 표시될 수 있습니다. 주소에서 메모리를 덤프하려고 할 때 디버거에 오류가 표시되면 !pte 확장을 사용하여 주소에 대한 PTE가 유효한지 여부를 확인할 수 있습니다. 이렇게 하면 메모리 주소가 실제로 유효하지 않은지 또는 페이지가 유효하지만 덤프 파일에서 사용할 수 없는지 확인하는 데 도움이 될 수 있습니다.
라이브 덤프 파일 분석
라이브 덤프가 발생하면 다른 메모리 덤프 파일에 사용되는 것과 동일한 기술을 사용하여 덤프 파일을 분석할 수 있습니다. 오류가 발생하는 동안 메모리의 내용을 이해하려면 프로세서 메모리 레지스터 및 어셈블리 프로그래밍에 대한 지식이 필요합니다.
자세한 내용은 다음을 참조하세요.
WinDbg를 사용하여 라이브 덤프 중지 코드 정보 표시
이 항목에 특정 라이브 덤프 코드가 표시되지 않는 경우 다음 구문(커널 모드)과 함께 Windows 디버거(WinDbg)의 !analyze 확장을 사용하여 라이브 덤프 코드로 바꿉 <code>
니다.
!analyze -show <code>
이 명령을 입력하면 WinDbg에서 지정된 라이브 덤프 코드에 대한 정보를 표시합니다. 기본 숫자 기준(radix)이 16이 아닌 경우 접두사는 <code>
0x입니다.
!analyze 명령에 라이브 덤프 코드 매개 변수를 제공하여 사용 가능한 매개 변수 정보를 표시합니다. 예를 들어 매개 변수 1 값이 0x3003 버그 검사 0x144 BUGCODE_USB3_DRIVER 대한 정보를 표시하려면 다음과 같이 사용합니다!analyze -show 0x144 0x3003
.
0: kd> !analyze -show 0x144 0x3003
BUGCODE_USB3_DRIVER (144)
This bugcheck usually happens when the USB3 core stack detects an invalid
operation being performed by a USB client. This bugcheck may also occur
due to hardware failure on a USB Boot Device.
Arguments:
Arg1: 0000000000003003, USB3_WER_BUGCODE_USBHUB3_DEVICE_ENUMERATION_FAILURE
A USB device failed enumeration.
Arg2: 0000000000000000, USBHUB3_LIVEDUMP_CONTEXT
Arg3: 0000000000000000, 0
Arg4: 0000000000000000, 0
WinDbg를 다운로드하려면 Windows용 디버깅 도구를 참조 하세요. WinDbg 개발 도구에 대한 자세한 내용은 Windows 디버깅 시작을 참조 하세요.
라이브 덤프 파일 위치
라이브 덤프는 기본적으로 'C:\WINDOWS\LiveKernelReports' 디렉터리에 저장됩니다.
전체 덤프: %systemroot%\LiveKernelReports\*.dmp
미니덤프: %systemroot%\LiveKernelReports\<ComponentName>\*.dmp
디렉터리 구조는 서로 다른 구성 요소에 대한 라이브 덤프를 저장하는 데 사용됩니다.
NDIS
PDCRevocation
PoW32kWatchdog
USBHUB3
WATCHDOG
라이브 덤프 레지스트리 키
시스템 생성 라이브 커널 보고서의 구성 옵션에 대한 자세한 내용은 WER 설정을 참조 하세요.
PowerShell을 사용하여 라이브 덤프를 수동으로 트리거
PowerShell 프롬프트를 열고 관리자에게 표시합니다.
Get-StorageSubSystem PowerShell 명령을 사용하여 StorageSubsystem 친숙한 이름을 가져옵니다.
C:\> Get-StorageSubSystem
FriendlyName HealthStatus OperationalStatus
------------ ------------ -----------------
Windows Storage on 10-2411-PC Healthy OK
- Get-StorageDiagnosticInfo를 사용하여 위의 하위 시스템에 대한 라이브 덤프를 생성합니다(다른 진단 로그와 함께). 자세한 내용은 Get-StorageDiagnosticInfo를 참조하세요.
C:\> Get-StorageDiagnosticInfo -StorageSubSystemFriendlyName "Windows Storage on 10-2411-PC" -IncludeLiveDump -DestinationPath C:\destinationfolder
- 출력은 요청된 정보가 생성되고 있음을 나타냅니다.
Gathering storage subsystem diagnostic information
Running
[oooooooooooo ]
- 덤프는 내부에
[DestinationPath]\localhost
있습니다.
C:\> dir C:\destinationfolder\localhost\*.dmp
Directory: C:\destinationfolder\localhost
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/5/2016 1:08 PM 867135488 LiveDump.dmp
커널 라이브 덤프 코드
다음 표에서는 커널 라이브 덤프 코드에 대한 링크를 제공합니다.
이러한 중지 코드는 라이브 덤프 또는 버그 확인 디바이스에 사용할 수 있습니다.
코드 | 속성 |
---|---|
0x00000124 | WHEA_UNCORRECTABLE_ERROR |
0x00000144 | BUGCODE_USB3_DRIVER |
0x00000164 | WIN32K_CRITICAL_FAILURE |