Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
DTrace (DTrace.exe), sistem bilgilerini ve olaylarını görüntüleyen bir komut satırı aracıdır. DTrace, Windows'a taşınabilir bir açık kaynak izleme platformudur. DTrace başlangıçta Solaris işletim sistemi için geliştirilmiştir. Hem kullanıcı/çekirdek işlevlerinin dinamik izlemesini, D dilini kullanarak betik oluşturma özelliğini hem de tahmini izlemeyi sağlar. Ayrıca, DTrace'de ETW enstrümantasyonu, ETW olay oluşturma, sistem çağrı sondalamaları ve canlı döküm yakalama özellikleri gibi Windows işletim sistemine özgü uzantılar bulunur.
Uyarı
DTrace, Sürüm 18980 ve Windows Server Derlemesi 18975'in ardından Windows'un Insider derlemelerinde desteklenir.
Windows GitHub sitesindeki DTrace burada bulunur:
https://github.com/microsoft/DTrace-on-Windows
DTrace Bilgilerini Açma
DTrace hakkında ayrıntılı bilgi için University Of Cambridge'de OpenDTrace Specification sürüm 1.0'a bakın.
Birincil GitHub sitesi konumundadır https://github.com/opendtrace/.
https://github.com/opendtrace/toolkit adresinde yararlı betikler bulunur.
Aşağıda gösterildiği gibi bir dizi DTrace kitabı mevcuttur:
DTrace: Oracle Solaris, Mac OS X ve FreeBSD'de Dinamik İzleme Brendan Gregg ve Jim Mauro
Solaris Performans ve Araçları: Solaris 10 ve OpenSolaris için DTrace ve MDB Teknikleri Richard McDougall, Jim Mauro ve Brendan Gregg tarafından
Windows DTrace hakkında geri bildirim sağlama
Yeni özellikler istemek veya Windows DTrace ile ilgili sorunları veya hataları bildirmek için Geri Bildirim Merkezi'ni kullanın.
- Windows'da Geri Bildirim Merkezi'ni başlatmak için Aramaya gidin, geri bildirim sözcüğünü girin ve Geri Bildirim Merkezi'ni seçin.
- Özellik önerin veya Sorun bildirin'i seçin.
- Sorunun ayrıntılı, belirli bir açıklamasını veya önerisini sağlayın.
DTrace Windows Uzantıları
Aşağıda, Windows'ta kullanılabilen Dtrace sağlayıcılarından bazıları ve neleri kullandıkları belirtilmiştir.
syscall – NTOS sistem çağrıları.
fbt (İşlev Sınırı İzleme) – Çekirdek işlevi giriş ve çıkışları.
pid (İşlem Kimliği) – Kullanıcı modu işlem izleme. Çekirdek modu FBT gibi, ama aynı zamanda rastgele işlev kaydırmalarının enstrümantasyonuna da izin verir.
etw (Windows için Olay İzleme) – ETW için yoklamaların tanımlanmasına izin verir. Bu sağlayıcı, DTrace'te mevcut işletim sistemi araçlarından yararlanmaya yardımcı olur.
SYSCALL – NTOS sistem çağrıları
SYSCALL, her sistem çağrısı için bir çift yoklama sağlar: sistem çağrısı girilmeden önce tetiklenen bir giriş yoklaması ve sistem çağrısı tamamlandıktan sonra ancak denetim kullanıcı düzeyine geri aktarilmeden önce tetiklenen bir dönüş yoklaması. Tüm SYSCALL yoklamaları için işlev adı, izlemeli sistem çağrısının adı olarak ayarlanır ve modül adı işlevin bulunduğu modüldür. SYSCALL sağlayıcısı tarafından sağlanan sistem çağrılarının adları, komut isteminden komutu dtrace.exe -l -P syscall yazarak bulunabilir. Prob adının küçük harfle yazılan syscall olduğunu unutmayın. Komut dtrace -ln syscall::: ayrıca syscall sağlayıcısından kullanılabilen tüm yoklamaları ve parametrelerini de listeler.
C:\> dtrace -ln syscall:::
ID PROVIDER MODULE FUNCTION NAME
6 syscall NtWaitHighEventPair entry
7 syscall NtWaitHighEventPair return
8 syscall NtRegisterThreadTerminatePort entry
9 syscall NtRegisterThreadTerminatePort return
...
Tüm ekran çıkışının bu örneklerde gösterilmediğini unutmayın. "..." kesilmiş çıkışı temsil etmek için kullanılır.
Çıktıyı kaydırmak için aşağıdaki gibi daha fazla komutu kullanın:
dtrace -ln syscall:::|more
Kullanılabilir syscall yoklamaları hakkında daha fazla bilgi görüntülemek için v seçeneğini ekleyin.
C:\> dtrace -lvn syscall:::
...
942 syscall NtSaveMergedKeys entry
Probe Description Attributes
Identifier Names: Private
Data Semantics: Private
Dependency Class: ISA
Argument Attributes
Identifier Names: Private
Data Semantics: Private
Dependency Class: ISA
Argument Types
args[0]: HANDLE
args[1]: HANDLE
args[2]: HANDLE
...
ETW
DTrace, mevcut bildirimli/izlenmiş ETW yoklamaları için destek içerir. ETW olaylarını olay tetiklenirken eşzamanlı olarak filtreleyebilir, ayrıştırabilir ve izleyebilirsiniz. Ayrıca DTrace, karmaşık hata durumlarında hata ayıklamaya yardımcı olmak üzere birleştirilmiş bir çıkış akışı sağlamak üzere çeşitli olayları/sistem durumlarını birleştirmek için kullanılabilir.
komutu dtrace -ln etw::: , syscall sağlayıcısından kullanılabilen tüm yoklamaları ve parametrelerini listeler.
C:\> dtrace -ln etw:::
ID PROVIDER MODULE FUNCTION NAME
944 etw 048dc470-37c1-52a8-565a-54cb27be37ec 0xff_0xffffffffffffffff generic_event
945 etw aab97afe-deaf-5882-1e3b-d7210f059dc1 0xff_0xffffffffffffffff generic_event
946 etw b0f40491-9ea6-5fd5-ccb1-0ec63be8b674 0xff_0xffffffffffffffff generic_event
947 etw 4ee869fa-9954-4b90-9a62-308c74f99d32 0xff_0xffffffffffffffff generic_event
...
Daha fazla bilgi için bkz. DTrace ETW.
İşlev Sınırı İzleme (FBT)
İşlev Sınır İzleme (FBT) sağlayıcısı, Windows çekirdeğindeki çoğu işleve giriş ve çıkışla ilişkili sondalar sağlar. işlevi, program metninin temel birimidir. Diğer DTrace sağlayıcılarına benzer şekilde, FBT açıkça etkinleştirilmediğinde yoklama etkisine sahip değildir. Etkinleştirildiğinde, FBT yalnızca yoklanan işlevlerde bir yoklama etkisine neden olur. FBT, x86 ve x64 platformlarında uygulanmıştır.
Her komut seti için, diğer fonksiyonları çağırmayan ve derleyici tarafından yüksek düzeyde optimize edilmiş, FBT ile izlenemeyen az sayıda fonksiyon (bunlar yaprak fonksiyonlar olarak adlandırılır) vardır. Bu işlevler için yoklamalar DTrace'te mevcut değildir.
komutu dtrace -ln fbt:nt:: , nt modülü için kullanılabilen tüm yoklamaları ve parametrelerini listeler. Tüm kullanılabilir modülleri listelemek için hata ayıklayıcı lm (Yüklenen Modülleri Listele) komutunu kullanın.
C:\>dtrace -ln "fbt:nt::"
ID PROVIDER MODULE FUNCTION NAME
3336 fbt nt PiDqActionDataFree entry
3337 fbt nt PiDqActionDataFree return
3338 fbt nt PiDqActionDataGetRequestedProperties entry
3339 fbt nt PiDqActionDataGetRequestedProperties return
3340 fbt nt _CmGetMatchingFilteredDeviceInterfaceList entry
...
Uyarı
Nt'de binlerce çağrı olduğundan, verileri günlüğe kaydeden bir DTrace komutu çalıştırırken işlev adını boş bırakmak iyi bir fikir değildir. Olası bir performans etkisinden kaçınmak için önerilen yaklaşım, işlev adının en az bir kısmını (gibi) fbt:nt:*Timer*:entrybelirtmektir.
PID
DTrace PID sağlayıcısı, web tarayıcısı veya veritabanı gibi kullanıcı modu işlemlerinin iç yürütmesini izlemenizi sağlar. İşlem başlatma sorunlarının hatalarını ayıklamak için işlem başlatma sırasında DTrace de ekleyebilirsiniz. PID tanımının bir parçası olarak, süreçte tanımlanan işlevleri ve işlevin içindeki belirli ofsetleri (ya da * joker karakteriyle tüm ofsetleri) belirtirsiniz. PID sağlayıcısı, betik yürütme sırasında ikilinin başlatılmasını veya çalıştırılmasını gerektirir.
Bu örnek komut, notepad.exeile ilişkilendirilmiş PID'de belirli bir çağrı hakkındaki bilgileri görüntüler. Tüm kullanılabilir modülleri listelemek için hata ayıklayıcı lm (Yüklenen Modülleri Listele) komutunu kullanın.
C:\Windows\system32>dtrace -ln "pid$target:ntdll:RtlAllocateHeap:entry" -c notepad.exe
ID PROVIDER MODULE FUNCTION NAME
5102 pid6100 ntdll RtlAllocateHeap entry
Uyarı
C++ ile yazılan işlevleri izlediğinizde, işlev adları tam biçimleriyle bir yoklama olarak belirtilemeyecek kadar uzun veya süslü olabilir. Yaygın bir çözüm, hedef işlevinizle benzersiz bir şekilde eşleşen bir ifade kullanmaktır. Örneğin, 'String??Copy' adını 'String::Copy()' ile eşleştirmek için yoklama adının 'probefunc' bölümü olarak veya 'String::GetPinnableReference()' ile eşleştirmek için '*GetPinnableReference' olarak kullanın.
DTrace Windows mimarisi
Kullanıcılar DTrace altyapısının ön ucu olarak görev yapan DTrace komutu aracılığıyla DTrace ile etkileşim kurar. Kullanıcı alanında derlenerek bir ara biçime (DIF) dönüşen D betikleri, yürütülmek üzere DTrace çekirdek bileşenine gönderilir ve bazen DIF Sanal Makinesi olarak adlandırılır. Bu, dtrace.sys sürücüsünde çalışır.
Traceext.sys (izleme uzantısı), Windows'un DTrace'in izleme sağlamak için bağlı olduğu işlevselliği kullanıma sunmasına olanak tanıyan bir Windows çekirdek uzantısı sürücüsüdür. Windows çekirdeği, stackwalk veya bellek erişimleri sırasında geri aramalar sağlar ve bunlar daha sonra izleme genişletmesi tarafından uygulanır.
Windows altında DTrace'i yükleme
Windows'un desteklenen bir sürümünü çalıştırdığınızı denetleyin. DTrace'in geçerli indirmesi, sürüm 18980 ve Windows Server Derlemesi 18975'in ardından 20H1 Windows'un Insider derlemelerinde desteklenir. DTrace'in bu sürümünün Windows'un eski sürümlerine yüklenmesi sistem kararlılığının oluşmasına neden olabilir ve önerilmez. (19H1 için DTrace'in arşivlenmiş sürümü artık kullanılamıyor ve artık desteklenmiyor.)
MSI yükleme dosyasını (Windows'da DTrace'i İndir) Microsoft İndirme Merkezi'nden indirin.
Yüklemeyi tamamla'yı seçin.
Önemli
Önyükleme bilgilerini değiştirmek için bcdedit'i kullanmadan önce test bilgisayarında Patchguard, BitLocker ve Secure Boot gibi Windows güvenlik özelliklerini geçici olarak askıya almanız gerekebilir. Test tamamlandığında bu güvenlik özelliklerini yeniden etkinleştirin ve güvenlik özellikleri devre dışı bırakıldığında test bilgisayarını uygun şekilde yönetin.
PATH ortam değişkenini C:\Program Files\DTrace içerecek şekilde güncelleştirin
set PATH=%PATH%;"C:\Program Files\DTrace"
- bcdedit komutunu kullanarak makinede DTrace'i etkinleştirin.
bcdedit /set dtrace ON
Yeni bir Windows Insider derlemesine güncelleştirdiğinizde dtrace bcdedit seçeneğini yeniden ayarlamanız gerekir.
Uyarı
BitLocker kullanıyorsanız, önyükleme değerlerinde değişiklik yaparken devre dışı bırakın. Bunu yapmazsanız BitLocker kurtarma anahtarı istenebilir. Bu durumdan kurtarmanın bir yolu kurtarma konsoluna önyükleme yapmak ve bcdedit değerini bcdedit /set {default} dtrace ongeri yüklemektir. bir işletim sistemi güncelleştirmesi değeri kaldırdıysa ve siz de bu değeri eklediyseniz, işletim sistemini kurtarmak için bcdedit komutunu kullanarak değerini bcdedit /deletevalue {default} dtracekaldırın. Ardından BitLocker'ı devre dışı bırakın ve dtrace öğesini bcdedit /set dtrace ONyeniden etkinleştirin.
VSM'yi ve Güvenli Çekirdeği etkinleştirmek için "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\EnableVirtualizationBasedSecurity" ayarını 1 olarak ayarlayarak çekirdek işlevi sınır izlemesini (FBT) etkinleştirmek için makinedeki VSM'yi (Sanal Güvenli Mod) yapılandırın.
Bunu yapmak için REG Add komutunu kullanın, örneğin:
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\ /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1
Bazı DTrace komutları Windows sembollerini kullanır. Windows simgelerini kullanmak için bir sembol dizini oluşturun ve sembollerin yolunu ayarlayın:
mkdir c:\symbols
set _NT_SYMBOL_PATH=srv*C:\symbols*https://msdl.microsoft.com/download/symbols
Sembol yolları hakkında daha fazla bilgi için bkz. Windows hata ayıklayıcıları için sembol yolu.
Sanal Makinenin içinde DTrace kullanma
Bir VM'de DTrace çalıştırıyorsanız, aşağıdaki PowerShell komutunu kullanarak VM durdurulduğunda VM'yi destekleyen makinede iç içe Sanallaştırma'yı açın. VM'de DTrace'i çalıştırdığınız <VMName> öğesini sağlayın. PowerShell Windows'larını Yönetici olarak açın.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
VM'yi destekleyen bilgisayarı yeniden başlatın.
DTrace yüklemesini doğrulama
Etkin yoklamaları listelemek için -l seçeneğini kullanın. DTrace etkinse, etw ve sistem olayları için birçok prob listeleniyor olmalıdır.
DTrace komutlarını girmek için yönetici olarak bir Windows komut istemi açın.
C:\> dtrace -l
...
179 syscall NtLockVirtualMemory return
180 syscall NtDeviceIoControlFile entry
181 syscall NtDeviceIoControlFile return
182 syscall NtCreateUserProcess entry
183 syscall NtCreateUserProcess return
184 syscall NtQuerySection entry
185 syscall NtQuerySection return
...
3161 etw 222962ab-6180-4b88-a825-346b75f2a24a 0xff_0xffffffffffffffff generic_event
3162 etw 3ac66736-cc59-4cff-8115-8df50e39816b 0xff_0xffffffffffffffff generic_event
3163 etw 42695762-ea50-497a-9068-5cbbb35e0b95 0xff_0xffffffffffffffff generic_event
3164 etw 3beef58a-6e0f-445d-b2a4-37ab737bd47e 0xff_0xffffffffffffffff generic_event
...
Yalnızca bu üç prob listeleniyorsa, DTrace.sys sürücüsünün yüklenmesiyle ilgili bir sorun vardır.
C:\> dtrace -l
ID PROVIDER MODULE FUNCTION NAME
1 dtrace BEGIN
2 dtrace END
3 dtrace ERROR
DTrace ile çalışmaya başlama - Tek satırlık komutlar
Bu komutları bir yönetici komut isteminden çalıştırarak başlayın.
Bu komut, bir programa göre sistem çağrısı özetini 5 saniye boyunca görüntüler. tick-5sec parametresi zaman aralığını belirtir. Çıkış(0); komutun tamamlandıktan sonra komut istemine geri dönmesine neden olur. Çıkış, [pid,execname] = count(); kullanılarak belirtilir ve bu, İşlem Kimliği (PID), yürütülebilir dosya adı ve son 5 saniye için bir sayaç görüntüler.
C:\> dtrace -Fn "tick-5sec {exit(0);} syscall:::entry{ @num[pid,execname] = count();} "
dtrace: description 'tick-5sec ' matched 471 probes
CPU FUNCTION
0 | :tick-5sec
1792 svchost.exe 4
4684 explorer.exe 4
4916 dllhost.exe 4
6192 svchost.exe 4
6644 SecurityHealth 4
92 TrustedInstall 5
504 csrss.exe 5
696 svchost.exe 6
...
Bu komut zamanlayıcı ayarlama/kaldırma çağrılarını 3 saniye boyunca özetler.
C:\> dtrace -Fn "tick-3sec {exit(0);} syscall::Nt*Timer*:entry { @[probefunc, execname, pid] = count();}"
dtrace: description 'tick-3sec ' matched 14 probes
CPU FUNCTION
0 | :tick-3sec
NtCreateTimer WmiPrvSE.exe 948 1
NtCreateTimer svchost.exe 564 1
NtCreateTimer svchost.exe 1276 1
NtSetTimer2 svchost.exe 1076 1
NtSetTimer2 svchost.exe 7080 1
NtSetTimerEx WmiPrvSE.exe 948 1
...
Semboller kullanan tek satırlı komutlar
Bu komut, Windows simgelerinden yararlanarak sembol yolunun yükleme bölümünde açıklandığı gibi ayarlanmasını gerektirir. Yüklemede daha önce belirtildiği gibi, bu komutları kullanarak bir dizin oluşturun ve sembol yolunu ayarlayın.
C:\> mkdir c:\symbols
C:\> set _NT_SYMBOL_PATH=srv*C:\symbols*https://msdl.microsoft.com/download/symbols
Bu örnek komut üst NT işlevlerini görüntüler.
C:\> dtrace -n "fbt:nt:*Timer*:entry { @k[probefunc] = count(); } tick-5s { trunc(@k, 10);printa(@k); exit(0); }"
dtrace: description 'fbt:nt:*Timer*:entry ' matched 340 probes
CPU ID FUNCTION:NAME
0 22362 :tick-5s
KeCancelTimer 712
KeSetTimer2 714
HalpTimerClearProblem 908
ExpSetTimerObject 935
NtSetTimerEx 935
KeSetTimer 1139
KeSetCoalescableTimer 3159
KeResumeClockTimerFromIdle 11767
xHalTimerOnlyClockInterruptPending 22819
xHalTimerQueryAndResetRtcErrors 22819
Bu komut SystemProcess çekirdek yapısının dökümünü alır.
C:\> dtrace -n "BEGIN {print(*(struct nt`_EPROCESS *) nt`PsInitialSystemProcess);exit(0);}"
...
uint64_t ParentSecurityDomain = 0
void *CoverageSamplerContext = 0
void *MmHotPatchContext = 0
union _PS_PROCESS_CONCURRENCY_COUNT ExpectedConcurrencyCount = {
Fraction :20 = 0
Count :12 = 0
uint32_t AllFields = 0
}
struct _KAFFINITY_EX IdealProcessorSets = {
uint16_t Count = 0x1
uint16_t Size = 0x20
uint32_t Reserved = 0
uint64_t [32] Bitmap = [ 0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
}
}
Bu komut, son 10 saniyenin en üst çekirdek yığınını görüntüler.
C:\> dtrace -qn "profile-997hz { @[stack()] = count(); } tick-10sec { trunc(@,5); printa(@); exit(0);}"
nt`KiDispatchInterruptContinue
nt`KiDpcInterrupt+0x318
nt`KiSwapThread+0x1054
nt`KiCommitThreadWait+0x153
nt`KeRemoveQueueEx+0x263
nt`IoRemoveIoCompletion+0x54
nt`NtWaitForWorkViaWorkerFactory+0x284
nt`KiSystemServiceCopyEnd+0x35
14
nt`KiDispatchInterruptContinue
nt`KiDpcInterrupt+0x318
...
Bu komut, başlatma sırasında notepad.exe tarafından çağrılan en iyi modülleri görüntüler. -c seçeneği belirtilen komutu (notepad.exe) çalıştırır ve tamamlandıktan sonra çıkar.
C:\> dtrace -qn "pid$target:::entry { @k[probemod] = count();} tick-10s{printa(@k); exit(0);}" -c notepad.exe
gdi32full 5
msvcp_win 6
combase 7
notepad 9
ADVAPI32 10
GDI32 11
SHELL32 11
USER32 21
win32u 345
KERNELBASE 3727
msvcrt 7749
KERNEL32 9883
RPCRT4 11710
ntdll 383445