DTrace 라이브 덤프
DTrace는 lkd()를 사용하여 D-스크립트 내에서 라이브 덤프를 캡처하는 기능을 제공합니다. 메모리 덤프 파일은 Windows 디버거를 사용하여 Windows의 복잡한 문제를 디버깅하는 데 사용됩니다. 자세한 내용은 WinDbg를 사용하여 크래시 덤프 파일 분석을 참조하세요. 디버거를 다운로드하려면 WinDbg Windows 디버거 다운로드 및 설치를 참조하세요.
DTrace 라이브 덤프는 오류가 발생한 정확한 지점에서 덤프를 트리거하는 기능을 제공합니다. instance 오류는 오류를 반환하는 함수일 수 있습니다. DTrace를 사용하여 이 함수 반환에 연결하고 반환 값이 "error"일 때 라이브 덤프를 트리거할 수 있습니다.
참고
DTrace는 버전 18980 및 Windows Server 빌드 18975 이후의 Windows 참가자 빌드에서 지원됩니다.
Windows에서 DTrace를 사용하는 방법에 대한 일반적인 내용은 DTrace를 참조하세요.
DTrace 라이브 덤프 사용
사용량: lkd(매개 변수);
라이브 미니 덤프에 포함된 정보를 변경하려면 다음 옵션을 설정할 수 있습니다.
0x0 - 전체 커널 덤프(기본값)
0x1 - 사용자 페이지 + 커널 페이지(KD 연결에서만 작동)
0x2 - 미니덤프
0x4 - Hyper-V 페이지 + 커널 페이지)
0x5 - 사용자, 커널 및 하이퍼바이저 페이지.
라이브 덤프 예제 코드
#pragma D option destructive
inline uint32_t STATUS_UNSUCCESSFUL = 0xc0000001UL;
syscall:::return
{
this->status = (uint32_t)arg0;
if (this->status == STATUS_UNSUCCESSFUL)
{
printf ("Return value arg0:%x \n", this->status);
printf ("Triggering LiveDump \n");
lkd(0);
exit(0);
}
}
파일을 livedumpstatuscheck.d로 저장합니다.
관리자 권한으로 명령 프롬프트를 열고 -s 옵션을 사용하여 스크립트를 실행합니다.
C:\Windows\System32>dtrace -s livedumpstatuscheck.d
dtrace: script 'livedumpstatuscheck.d' matched 1881 probes
dtrace: allowing destructive actions
CPU ID FUNCTION:NAME
0 93 NtAlpcSendWaitReceivePort:return Return value arg0:c0000001
Triggering LiveDump
만들어진 덤프 파일은 일반적으로 에 있습니다 C:\Windows\LiveKernelReports
.
덤프 파일 위치가 변경된 경우 값은 다음 레지스트리 키에 저장됩니다. hklm\system\currentcontrolset\control\crashcontrol\livekernelreports
위에서 설명한 대로 WinDbg를 사용하여 덤프 파일을 사용합니다.
문제 해결
라이브 덤프 관련 이벤트 보기
Windows 이벤트 뷰어 열기: 애플리케이션 및 서비스 로그-Microsoft-Windows-Kernel-Livedump-Operational>>>>으로 이동
로그를 찾지 못한 경우 아래 설명된 대로 명령 프롬프트 또는 이벤트 뷰어에서 분석 채널을 사용하도록 설정합니다.
명령 프롬프트에서 분석 채널 사용
이 명령을 사용하여 및 관리자 명령 프롬프트에서 분석 채널을 사용하도록 설정합니다.
wevtutil sl Microsoft-Windows-Kernel-LiveDump/Analytic /e:true
이벤트 뷰어 사용하여 분석 채널 사용
Windows 이벤트 뷰어 시작
보기 및 검사 "분석 및 디버그 로그 표시"를 클릭합니다. 그러면 livedump에 대한 분석 채널이 표시됩니다.
마우스 오른쪽 단추를 클릭하고 Microsoft-Windows-Kernel-LiveDump/Analytic을 사용하도록 설정합니다.
전체 라이브 덤프 사용
아래 예제 설정은 지정된 시간에 디스크에 있을 수 있는 전체 라이브 덤프의 최대 수를 10으로 설정하고 미니 덤프뿐만 아니라 전체 메모리 덤프를 저장하는 방법을 보여 줍니다.
reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v FullLiveReportsMax /d 10
reg add "HKLM\System\CurrentControlSet\Control\CrashControl" /f /t REG_DWORD /v AlwaysKeepMemoryDump /d 1
이러한 설정에 대한 자세한 내용은 WER 설정을 참조하세요.
제한 사용 안 함
제한은 덤프 및 로깅 시스템이 Windows의 일반적인 사용에 영향을 주지 않도록 하는 기능입니다. 이 기능은 리소스가 제한된 특정 환경에서 라이브 덤프를 만드는 데 방해가 될 수 있습니다.
라이브 덤프 제한 설정을 확인하고 필요한 경우 다음과 같이 SystemThrottleThreshold 및 ComponentThrottleThreshold 키를 0으로 설정하여 제한을 사용하지 않도록 설정하여 다시 시도합니다.
reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v SystemThrottleThreshold /d 0
reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v ComponentThrottleThreshold /d 0
디스크 공간 문제(이벤트 ID 202 -오류 텍스트: 라이브 덤프 쓰기 지연 덤프 데이터 API가 종료되었습니다. NT 상태: 0xC000007F.)
즉, 디스크 공간이 부족합니다. 아래 표시된 레지스트리 키를 업데이트하여 라이브 덤프 만들기 경로를 이 예제에서 사용 가능한 추가 스토리지 공간이 있는 드라이브 d:로 변경합니다.
reg add hklm\system\currentcontrolset\control\crashcontrol\livekernelreports /v "LiveKernelReportsPath" /t reg_sz /d "\??\d:\livedumps"
이 명령은 라이브 덤프 루트 경로를 d:\livedumps
(예: )로 설정합니다.
OS에서 관리되므로 폴더를 수동으로 만들지 마세요. 적절한 권한으로 덤프가 트리거될 때 만들어집니다.