다음을 통해 공유


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

이벤트 뷰어 사용하여 분석 채널 사용

  1. Windows 이벤트 뷰어 시작

  2. 보기 및 검사 "분석 및 디버그 로그 표시"를 클릭합니다. 그러면 livedump에 대한 분석 채널이 표시됩니다.

  3. 마우스 오른쪽 단추를 클릭하고 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에서 관리되므로 폴더를 수동으로 만들지 마세요. 적절한 권한으로 덤프가 트리거될 때 만들어집니다.

참고 항목

Windows의 DTrace

DTrace Windows 프로그래밍

DTrace Windows 코드 샘플