Windows의 DTrace, ARM64 지원으로 20H1 업데이트 수신
DTrace는 인기 있는 오픈 소스 디버깅 및 진단 도구입니다. 원래 Solaris용으로 제작되었으며 Linux, FreeBSD, NetBSD 및 macOS에서 사용할 수 있게 되었습니다. Microsoft는 이를 Windows로 이식했으며 20H1 기능 업데이트로 일부 업데이트를 추가했습니다.
DTrace는 관리자 또는 개발자가 사용자 또는 커널 모드에서 시스템을 실시간으로 볼 수 있도록 하는 동적 추적 프레임워크입니다. DTrace에는 추적 지점을 동적으로 삽입할 수 있는 C 스타일의 높은 수준의 강력한 프로그래밍 언어가 있습니다. 동적으로 삽입된 이러한 추적 지점을 사용하여 조건 또는 오류를 필터링하고 잠금 패턴을 분석하는 코드를 작성하고 교착 상태를 감지하는 등의 작업을 수행할 수 있습니다.
Windows에서 DTrace는 정적이며 런타임에 추적 지점을 프로그래밍 방식으로 삽입하는 기능을 제공하지 않는 ETW(Event Tracing for Windows)를 확장합니다.
dtrace.sys에서 사용하는 모든 API와 기능은 문서화된 호출입니다.
Microsoft는 다양한 시스템 모니터링 역할을 수행할 수 있는 Windows 10용 특수 드라이버를 구현했습니다. 드라이버는 버전 1903부터 Windows 10에 내장되어 있습니다.
Windows 10 내부자 빌드 19041.21부터 DTrace는 다음과 같은 개선 사항과 함께 제공됩니다.
ARM64 미리보기
네, 맞습니다! DTrace는 이제 미리보기 모드에서 ARM64를 지원합니다. ARM64 MSI는 위에 나열된 다운로드 링크에서 사용할 수 있습니다.
당신은 당신의 서피스 프로 X 최신 Windows 10 Insider Preview(20H1) 빌드 실행, 19041.21.
사용자 모드 스택워크
미리 보기에서 DTrace의 스택워크 기능은 커널 모드(스택)로 제한되었습니다. 이 업데이트는 사용자 모드 스택워크 기능에 대한 지원을 추가합니다(유스택). 스택과 마찬가지로 ustack 기능은 오픈 소스 DTrace 사양과 완벽하게 호환됩니다. 프레임(깊이) 및 크기(지금은 무시됨) 또는 void를 지정하여 세 가지 방법으로 호출할 수 있습니다.
- Ustack(nframes, 크기)
- Ustack(nframes)
- 유스택()
ustack()은 프로브가 실행될 때 호출 프레임의 주소를 결정할 수 있지만 스택 프레임은 DTrace 소비자가 사용자 모드에서 ustack() 작업을 처리할 때까지 기호로 변환되지 않습니다. 기호 다운로드는 출력을 느리게 할 수 있습니다. 따라서 아래와 같이 로컬에 캐시된 기호와 함께 이 기능을 사용하는 것이 좋습니다.
dtrace -n "프로필-1ms /arg1/ {ustack(50, 0); exit (0);} " -y C:\symbols. dtrace: 설명 'profile-1ms'가 1개의 프로브와 일치했습니다. CPU ID 기능: 이름 0 3802:profile-1ms ntdll`ZwAllocateVirtualMemory+0x14 ntdll`RtlAllocateHeap+0x3ded ntdll`RtlAllocateHeap+0x763 ucrtbase`malloc_base+0x44
라이브 덤프 지원
Windows는 일반적으로 라이브 덤프 문제를 신속하게 진단하는 데 도움이 됩니다. 라이브 덤프는 다운타임 없이 여러 프로세스 또는 시스템 전체 문제와 관련된 문제를 해결하는 데 도움이 됩니다. 20H1에서 Windows의 DTrace는 다음을 사용하여 D-스크립트 내부에서 라이브 덤프를 캡처하는 데 사용할 수 있습니다. lkd() DTrace 시설. 이 기능의 일반적인 사용 사례는 오류 경로(예: 반환 코드는 오류를 나타냄)를 계측하고 고급 진단을 위해 오류 지점에서 바로 라이브 덤프를 캡처하는 것입니다. 라이브 덤프 지원에 대한 자세한 내용은 다음을 참조하십시오. DTrace 라이브 덤프.
dtrace -wn "syscallreturn { if (arg0 != 0xc0000001UL) { lkd (0); printf(\" 라이브 덤프 트리거 \n \");exit (0); }}" dtrace: 설명 'syscallreturn'이 1411개의 프로브와 일치했습니다. dtrace: 파괴적인 행동을 허용합니다. CPU ID 기능: 이름 0 181 NtDeviceIoControlFile: 라이브 덤프 디렉터리 반환 c:\Windows\LiveKernelReports C 드라이브의 볼륨에 레이블이 없습니다. 볼륨 일련 번호는 c:\Windows\LiveKernelReports의 70F4-B9F6 디렉토리입니다. 11/05/2019 05:20 PM<감독>. 2019년 11월 5일 오후 5시 20분 <감독>.. 2019년 11월 5일 오후 5시 19분 <감독> DTRACE. 2019년 11월 5일 오후 5시 20분 53,395,456 DTRACE-20191105-1720.dmp.
ETW 추적
ETW 추적 Windows에서 디버깅을 위해 가장 자주 사용되는 도구입니다. Windows 19H1 미리보기의 DTrace에서는 ETW 제공자.
20H1에서는 이 기능을 더욱 강화하여 D-스크립트 내부에서 새로운 ETW 이벤트를 즉석에서 생성합니다. ETW_Trace() 시설. 이는 기존 ETW 이벤트가 충분하지 않고 프로덕션 코드를 수정하지 않고 추가 ETW 추적 지점을 추가하려는 상황에서 도움이 됩니다.
에 대한 자세한 내용은 ETW_추적 시설과 ETW 제공자, 보다 DTrace ETW.
/* GitHub ETW 공급자 샘플(아래 링크)을 실행하여 노드 메모리 정보 이벤트를 인쇄합니다. https://github.com/microsoft/DTrace-on-Windows/blob/master/samples/windows/etw/numamemstats.d. */ dtrace -qs numamemstats.d 파티션 ID: 0. 카운트: 1. 노드 번호: 1. m_nodeinfo { uint64_t TotalPageCount = 0x1fb558 uint64_t SmallFreePageCount = 0x41 uint64_t SmallZeroPageCount = 0 uint64_t Medium FreePageCount = 0 uint64_t MediumZeroPageCount = 0 uint64_t LargeFreePageCount = 0 uint64_t LargeZeroPageCount = 0 uint64_t HugeFreePageCount = 0 uint64_t 거대한 ZeroPageCount = 0. }
DTrace 설치에 관심이 있다면 설치 방법을 확인하십시오. 여기.
업데이트된 DTrace MSI 패키지를 다운로드할 수 있습니다. 여기에서.
여기 있습니다 소스 코드 그리고 고급 스크립트.
원천