Windows'ta DTrace, 20H1 Güncellemelerini ARM64 Desteği ile Aldı
DTrace, popüler açık kaynaklı hata ayıklama ve teşhis aracıdır. Başlangıçta Solaris için inşa edilmiştir ve Linux, FreeBSD, NetBSD ve macOS için kullanılabilir hale gelmiştir. Microsoft, Windows'a taşıdı ve 20H1 özellik güncellemesi ile güncellemelerin bir kısmını ona ekledi.
DTrace, bir yöneticinin veya geliştiricinin bir sisteme kullanıcı veya çekirdek modunda gerçek zamanlı bir bakış elde etmesini sağlayan dinamik bir izleme çerçevesidir. DTrace, izleme noktalarını dinamik olarak eklemenizi sağlayan C tarzı yüksek seviyeli ve güçlü bir programlama diline sahiptir. Dinamik olarak eklenen bu izleme noktalarını kullanarak, koşullara veya hatalara göre filtreleyebilir, kilit modellerini analiz etmek için kod yazabilir, kilitlenmeleri tespit edebilir, vb.
Windows'ta DTrace, statik olan ve çalışma zamanında programlı olarak izleme noktaları ekleme yeteneği sağlamayan Windows için Olay İzleme'yi (ETW) genişletir.
dtrace.sys tarafından kullanılan tüm API'ler ve işlevler belgelenmiş çağrılardır.
Microsoft, Windows 10 için bir dizi sistem izleme rolünün gerçekleştirilmesine izin veren özel bir sürücü uygulamıştır. Sürücü, 1903 sürümünden başlayarak Windows 10'da yerleşiktir.
Windows 10 Insider build 19041.21'den başlayarak, DTrace aşağıdaki geliştirmelerle birlikte gelir.
ARM64 önizleme
Evet bu doğru! DTrace artık önizleme modunda ARM64'ü destekliyor. ARM64 MSI, yukarıda listelenen indirme bağlantısında mevcuttur.
üzerinde kullanabilirsin Yüzey Pro X ile başlayan en son Windows 10 Insider Preview (20H1) derlemesini çalıştıran 19041.21.
Kullanıcı modu Stackwalk
Önizlemede, DTrace'deki stackwalk özelliği Çekirdek modu (yığın) ile sınırlıydı. Bu güncelleme, kullanıcı modu stackwalk tesisi için destek ekler (usta). Yığın gibi, ustack tesisi de açık kaynaklı DTrace spesifikasyonu ile tamamen uyumludur. Çerçeveler (derinlik) ve boyut (şimdilik yok sayılır) veya void belirtilerek üç şekilde çağrılabilir.
- Ustack (nframe'ler, boyut)
- Ustack (nframe'ler)
- Ustack()
ustack (), sonda tetiklendiğinde çağıran çerçevenin adresini belirleyebilirken, yığın çerçeveleri ustack () eylemi DTrace tüketicisi tarafından kullanıcı modunda işlenene kadar sembollere çevrilmez. Sembol indirme çıktıyı yavaşlatabilir. Bu nedenle, bu özelliği aşağıdaki gibi yerel olarak önbelleğe alınmış sembollerle kullanmak daha iyidir.
dtrace -n "profile-1ms /arg1/ {ustack (50, 0); çıkış (0);} " -y C:\semboller. dtrace: açıklama 'profile-1ms' 1 probla eşleşti. CPU ID İŞLEVİ: İSİM 0 3802 :profile-1ms ntdll`ZwAllocateVirtualMemory+0x14 ntdll`RtlAllocateHeap+0x3ded ntdll`RtlAllocateHeap+0x763 ucrtbase`malloc_base+0x44
Canlı döküm desteği
Windows genellikle denilen bir şey kullanır Canlı döküm sorunları hızlı bir şekilde teşhis etmeye yardımcı olmak için. Canlı dökümler, birden çok işlemi içeren sorunları veya sistem genelindeki sorunları kesinti süresi olmadan gidermeye yardımcı olur. 20H1'de, Windows'ta DTrace, aşağıdakileri kullanarak bir D-script içinden canlı bir dökümü yakalamak için kullanılabilir. lkd() DTrace tesisi. Bu tesisin yaygın bir kullanım durumu, hata yolunu (dönüş kodunun bir arızayı göstermesi gibi) enstrümantal etmesi ve gelişmiş teşhis için arıza noktasında canlı bir dökümü yakalamasıdır. Canlı döküm desteği hakkında daha fazla bilgi için bkz. DTrace Canlı Dökümü.
dtrace -wn "syscallreturn { if (arg0 != 0xc0000001UL) { lkd (0); printf(\" Canlı dökümü tetikleme \n \");çıkış (0); }}" dtrace: tanım 'syscallreturn' 1411 problarıyla eşleşti. dtrace: yıkıcı eylemlere izin vermek. CPU ID İŞLEVİ: İSİM 0 181 NtDeviceIoControlFile: dönüş Tetikleme Canlı dökümü dir c:\Windows\LiveKernelReports C sürücüsündeki Birim etiketi yok. Birim Seri Numarası: 70F4-B9F6 Dizini c:\Windows\LiveKernelReports 11.05.2019 05:20 PM<DIR>. 05.11.2019 05:20 <DIR>.. 05.11.2019 05:19 <DIR> DTRACE. 05.11.2019 05:20 53.395.456 DTRACE-20191105-1720.dmp.
ETW İzleme
ETW izleme Windows'ta hata ayıklamak için en sık kullanılan araçtır. Windows 19H1 önizlemesinde DTrace'de, aşağıdakileri kullanarak izleme günlüğüne kaydedilen ve tezahür ettirilen olayları denetlemek için destek ekledik: ETW sağlayıcısı.
20H1'de, bir D-script içinden anında yeni ETW olayları oluşturmak için bu özelliği daha da geliştirdik. ETW_Trace() tesis. Bu, mevcut ETW olaylarının yetersiz olduğu ve üretim kodunu değiştirmeden ek ETW izleme noktaları eklemek istediğiniz durumlarda yardımcı olur.
hakkında daha fazla bilgi için ETW_Trace tesis ve ETW sağlayıcısı, görmek DTrace ETW.
/* Düğüm bellek bilgisi olayını yazdırmak için GitHub ETW sağlayıcı örneğini çalıştırıyor (bağlantı aşağıda). https://github.com/microsoft/DTrace-on-Windows/blob/master/samples/windows/etw/numamemstats.d. */ dtrace -qs numamemstats.d Bölüm Kimliği: 0. Sayı: 1. Düğüm numarası: 1. m_nodeinfo { uint64_t TotalPageCount = 0x1fb558 uint64_t SmallFreePageCount = 0x41 uint64_t SmallZeroPageCount = 0 uint64_t MediumFreePageCount = 0 uint64_t MediumZeroPageCount = 0 uint64_t LargeFreePageCount = 0 uint64_t LargeZeroPageCount = 0 uint64_t HugeFreePageCount = 0 uint64_t HugeZeroPageCount = 0. }
DTrace'i kurmakla ilgileniyorsanız, bunun nasıl yapılabileceğini kontrol edin. Burada.
Güncellenmiş DTrace MSI paketini indirebilirsiniz buradan.
İşte burada kaynak kodu ve gelişmiş komut dosyaları.
Kaynak