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.
Bu bölümde, çekirdek modu sürücülerine olay izleme eklemek üzere Windows için Olay İzleme (ETW) çekirdek modu API'sinin nasıl kullanılacağı açıklanmaktadır. ETW çekirdek modu API'si Windows Vista ile kullanıma sunulmuştur ve önceki işletim sistemlerinde desteklenmez. Sürücünüzün Windows 2000 ve sonraki sürümlerde izleme özelliğini desteklemesi gerekiyorsa WPP Yazılım İzleme veya WMI Olay İzleme'yi kullanın.
Tavsiye
Windows Driver Kit (WDK) ve Visual Studio kullanarak ETW'nin nasıl uygulandığını gösteren örnek kodu görüntülemek için Eventdrv örneğine bakın.
Bu bölümde:
İş Akışı - Kernel-Mode Sürücülerine Olay İzleme Ekleme
1. Yükseltilmesi gereken olayların türüne ve bunların nerede yayımlandığına karar verin
2. Sağlayıcıyı, olayları ve kanalları tanımlayan bir izleme bildirimi oluşturun
3. İleti derleyicisini (Mc.exe) kullanarak izleme bildirimini derleyin
7. ETW desteğini doğrulamak için sürücüyü test edin
İş Akışı - Kernel-Mode Sürücülerine Olay İzleme Ekleme
1. Yükseltilmesi gereken olayların türüne ve bunların nerede yayımlandığına karar verin
Kodlamaya başlamadan önce, sürücünün Windows için Olay İzleme 'de (ETW) oturum açmasını istediğiniz olay türüne karar vermeniz gerekir. Örneğin, sürücünüz dağıtıldıktan sonra sorunları tanılamanıza yardımcı olabilecek olayları veya sürücünüzü geliştirirken size yardımcı olabilecek olayları günlüğe kaydetmek isteyebilirsiniz. Bilgi için bkz. Windows Olay Günlüğü Başvurusu.
Olay türleri kanallarla tanımlanır. Kanal, televizyon kanalına benzer şekilde belirli bir izleyici kitlesine yönlendirilen Yönetici, İşlemsel, Analitik veya Hata Ayıklama türündeki olayların adlandırılmış akışıdır. Kanal, olayları olay sağlayıcısından olay günlüklerine ve olay tüketicilerine teslim eder. Daha fazla bilgi için bkz. Kanalları Tanımlama.
Geliştirme sırasında, büyük olasılıkla kodunuzda hata ayıklamanıza yardımcı olan olayları izlemeyle ilgileniyorsunuz. Bu kanal, sürücü dağıtıldıktan sonra ortaya çıkabilecek sorunları gidermeye yardımcı olmak için üretim kodunda kullanılabilir. Performansı ölçmek için kullanılabilecek olayları da izlemek isteyebilirsiniz; bu olaylar, BT uzmanlarının sunucu performansını ayarlamalarına yardımcı olabilir ve ağ performans sorunlarını belirlemeye yardımcı olabilir.
2. Sağlayıcıyı, olayları ve kanalları tanımlayan bir izleme bildirimi oluşturun
Enstrümantasyon manifestosu, bir sağlayıcının oluşturacağı olayların resmi tanımını sağlayan bir XML dosyasıdır. İzleme bildirimi olay sağlayıcısını tanımlar, kanalı veya kanalları (en fazla sekiz) belirtir ve olayları ve bu olayların kullanılan şablonlarını açıklar. Ayrıca enstrümantasyon manifesti, izleme iletilerini yerelleştirebilmeniz için dize yerelleştirmesine olanak tanır. Olay sistemi ve olay tüketicileri, sorgu ve analiz gerçekleştirmek için bildirimde sağlanan yapılandırılmış XML verilerini kullanabilir.
İzleme bildirimi hakkında bilgi için bkz . İzleme Bildirimi Yazma (Windows), EventManifest Şeması (Windows) ve Windows Olay Günlüğünü Kullanma (Windows).
Aşağıdaki izleme bildiriminde "Örnek Sürücü" adını kullanan bir olay sağlayıcısı gösterilmektedir. Bu adın sürücü ikili dosyasının adıyla aynı olması gerekmeyen bir ad olduğunu unutmayın. Bildirim ayrıca sağlayıcı için bir GUID ve ileti ile kaynak dosyalarının yollarını belirtir. İleti ve kaynak dosyaları ETW'ye olayların kodunu çözmek ve raporlamak için gereken kaynakları nerede bulacağıyla ilgili bilgi verir. Bu yollar sürücü (.sys) dosyasının konumuna işaret eder. Sürücü hedef bilgisayarda belirtilen dizine yüklenmelidir.
Örnek, Yönetici türündeki olaylar için bir kanal olan adlandırılmış kanal Sistemini kullanır. Bu kanal,%WindowsSdkDir%\include\um dizininde Windows Sürücü Seti (WDK) ile sağlanan Winmeta.xml dosyasında tanımlanır.
Sistem kanalı, sistem hizmet hesapları altında çalışan uygulamalar için güvenli hale getirilir. Bildirim, yayımlandıklarında olaylarla birlikte sağlanan veri türlerinin yanı sıra statik ve dinamik içeriklerini açıklayan olay şablonlarını içerir. Bu örnek bildirim üç olayı tanımlar: StartEvent, SampleEventAve UnloadEvent.
Kanallara ek olarak, olayları düzeyler ve anahtar sözcüklerle ilişkilendirebilirsiniz. Anahtar sözcükler ve düzeyler olayları etkinleştirmek için bir yol sağlar ve yayımlandıklarında olayları filtrelemek için bir mekanizma sağlar. Anahtar sözcükler mantıksal olarak ilişkili olayları birlikte gruplandırmak için kullanılabilir. Kritik, hata, uyarı veya bilgilendirme gibi bir olayın önem derecesini veya ayrıntı düzeyini belirtmek için bir düzey kullanılabilir. Winmeta.xml dosyası, olay öznitelikleri için önceden tanımlanmış değerler içerir.
Olay yükü (olay iletisi ve veriler) için bir şablon oluşturduğunuzda, giriş ve çıkış türlerini belirtmeniz gerekir. Desteklenen türler , InputType Karmaşık Türü'nin (Windows) Açıklamalar bölümünde açıklanmıştır.
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<instrumentationManifest
xmlns="http://schemas.microsoft.com/win/2004/08/events"
xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.microsoft.com/win/2004/08/events eventman.xsd"
>
<instrumentation>
<events>
<provider
guid="{b5a0bda9-50fe-4d0e-a83d-bae3f58c94d6}"
messageFileName="%SystemDrive%\ETWDriverSample\Eventdrv.sys"
name="Sample Driver"
resourceFileName="%SystemDrive%\ETWDriverSample\Eventdrv.sys"
symbol="DriverControlGuid"
>
<channels>
<importChannel
chid="SYSTEM"
name="System"
/>
</channels>
<templates>
<template tid="tid_load_template">
<data
inType="win:UInt16"
name="DeviceNameLength"
outType="xs:unsignedShort"
/>
<data
inType="win:UnicodeString"
name="name"
outType="xs:string"
/>
<data
inType="win:UInt32"
name="Status"
outType="xs:unsignedInt"
/>
</template>
<template tid="tid_unload_template">
<data
inType="win:Pointer"
name="DeviceObjPtr"
outType="win:HexInt64"
/>
</template>
</templates>
<events>
<event
channel="SYSTEM"
level="win:Informational"
message="$(string.StartEvent.EventMessage)"
opcode="win:Start"
symbol="StartEvent"
template="tid_load_template"
value="1"
/>
<event
channel="SYSTEM"
level="win:Informational"
message="$(string.SampleEventA.EventMessage)"
opcode="win:Info"
symbol="SampleEventA"
value="2"
/>
<event
channel="SYSTEM"
level="win:Informational"
message="$(string.UnloadEvent.EventMessage)"
opcode="win:Stop"
symbol="UnloadEvent"
template="tid_unload_template"
value="3"
/>
</events>
</provider>
</events>
</instrumentation>
<localization xmlns="http://schemas.microsoft.com/win/2004/08/events">
<resources culture="en-US">
<stringTable>
<string
id="StartEvent.EventMessage"
value="Driver Loaded"
/>
<string
id="SampleEventA.EventMessage"
value="IRP A Occurred"
/>
<string
id="UnloadEvent.EventMessage"
value="Driver Unloaded"
/>
</stringTable>
</resources>
</localization>
</instrumentationManifest>
3. İleti derleyicisini (Mc.exe) kullanarak araç bildirimini derleyin
Kaynak kodunuzu derlemeden önce ileti derleyicisi (Mc.exe) çalıştırılmalıdır. İleti derleyicisi Windows Sürücü Seti'ne (WDK) dahil edilir. İleti derleyicisi, olay sağlayıcısı, olay öznitelikleri, kanallar ve olaylar için tanımları içeren bir üst bilgi dosyası oluşturur. Bu üst bilgi dosyasını kaynak kodunuza eklemeniz gerekir. İleti derleyicisi ayrıca oluşturulan kaynak derleyici betiğini (*.rc) ve kaynak derleyici betiğinin içerdiği oluşturulan .bin dosyalarını (ikili kaynaklar) yerleştirir.
Bu adımı derleme işleminizin bir parçası olarak birkaç yolla ekleyebilirsiniz:
İleti derleyicisi görevini sürücü proje dosyasına ekleme ( Eventdrv örneğinde gösterildiği gibi).
İzleme bildirimini eklemek ve İleti Derleyicisi özelliklerini yapılandırmak için Visual Studio'yu kullanma.
Proje dosyasına ileti derleyici görevi ekleme derleme işlemine ileti derleyicisini nasıl ekleyebileceğinize ilişkin bir örnek için Eventdrv örneğinin proje dosyasına bakın. Eventdrv.vcxproj dosyasında, ileti derleyicisini çağıran bir <MessageCompile> bölümü vardır. İleti derleyicisi, evntdrvEvents.h üst bilgi dosyasını oluşturmak için giriş olarak bildirim dosyasını (evntdrv.xml) kullanır. Bu bölüm, oluşturulan RC dosyalarının yollarını belirtir ve çekirdek modundaki günlük makrolarını etkinleştirir. Bu bölümü kopyalayıp sürücü proje dosyanıza (.vcxproj) ekleyebilirsiniz.
<MessageCompile Include="evntdrv.xml">
<GenerateKernelModeLoggingMacros>true</GenerateKernelModeLoggingMacros>
<HeaderFilePath>.\$(IntDir)</HeaderFilePath>
<GeneratedHeaderPath>true</GeneratedHeaderPath>
<WinmetaPath>"$(SDK_INC_PATH)\winmeta.xml"</WinmetaPath>
<RCFilePath>.\$(IntDir)</RCFilePath>
<GeneratedRCAndMessagesPath>true</GeneratedRCAndMessagesPath>
<GeneratedFilesBaseName>evntdrvEvents</GeneratedFilesBaseName>
<UseBaseNameOfInput>true</UseBaseNameOfInput>
</MessageCompile>
Eventdrv.sys örneğini oluşturduğunuzda, Visual Studio olay izleme için gerekli dosyaları oluşturur. Ayrıca evntdrv.xml bildirimini sürücü projesi için Kaynak Dosyaları listesine ekler. İleti Derleyicisi özellik sayfalarını görüntülemek için bildirimi seçip tutabilir (veya sağ tıklayabilirsiniz).
İnstrümantasyon bildirimini eklemek için Visual Studio kullanma
Araç seti bildirimini sürücü projesine ekleyebilir ve ardından gerekli kaynak ve üst bilgi dosyalarını oluşturmak için mesaj derleyicisi özelliklerini yapılandırabilirsiniz.
Projeye Visual Studio kullanarak araçsal bildirim eklemek için
Çözüm Gezgini'nde bildirim dosyasını sürücü projesine ekleyin. Kaynak Dosyaları > Varolan ÖğeYi Ekle'yi > (örneğin, evntdrv.xml veya mydriver.man) seçip basılı tutun (veya sağ tıklayın).
Yeni eklediğiniz dosyayı seçip basılı tutun (veya sağ tıklayın) ve özellik sayfalarını kullanarak öğe türünü MessageCompile olarak değiştirin ve Uygula'yı seçin.
İleti Derleyicisi özellikleri görüntülenir. Genel ayarlar'ın altında aşağıdaki seçenekleri ayarlayın ve uygula'yı seçin.
Genel Ayarlar Çekirdek Modu Günlük Makrolarını Oluştur Evet (-km) Girişin Temel Adını Kullan Evet (-b) Dosya Seçenekleri'nin altında aşağıdaki seçenekleri ayarlayın ve Uygula'yı seçin.
Dosya Seçenekleri Ayarlar Sayaç içeren üst bilgi dosyası oluşturma Evet Üst Bilgi Dosya Yolu $(IntDir) Oluşturulan RC ve İkili İleti Dosyaları Yolu Evet RC Dosya Yolu $(IntDir) Oluşturulan Dosyalar Temel Adı $(Dosya Adı)
varsayılan olarak, ileti derleyicisi, oluşturduğu dosyaların temel adı olarak giriş dosyasının temel adını kullanır. Bir temel ad belirtmek için , Oluşturulan Dosyalar Temel Adı (-z) alanını ayarlayın. Eventdr.sys örneğinde, temel ad evntdrvEvents olarak ayarlanır, böylece evntdrv.c dosyasında bulunan evntdrvEvents.h üst bilgi dosyasının adıyla eşleşir.
Uyarı
Oluşturulan .rc dosyasını Visual Studio projenize eklemezseniz, bildirim dosyasını yüklediğinizde bulunamaz kaynaklar hakkında hata iletileri alabilirsiniz.
4. Olayları yükseltmek (yayımlamak) için oluşturulan kodu ekleyin (olayları kaydetme, kaydını kaldırma ve yazma)
İzleme bildiriminde, olay sağlayıcısının adlarını ve olay tanımlayıcılarını tanımlamıştınız. Araç gereç bildirimini ileti derleyicisi ile derlediğinizde, ileti derleyicisi kaynakları açıklayan ve olaylar için makroları da tanımlayan bir başlık dosyası oluşturur. Şimdi, bu olayları tetikleyecek şekilde oluşturulan kodu sürücünüze eklemeniz gerekir.
Kaynak dosyanıza, ileti derleyicisi (MC.exe) tarafından oluşturulan olay üst bilgisi dosyasını ekleyin. Örneğin, Eventdrv örneğinde, Evntdrv.c kaynak dosyası önceki adımda oluşturulan üst bilgi dosyasını (evntdrvEvents.h) içerir:
#include "evntdrvEvents.h"Sürücüyü olay sağlayıcısı olarak kaydeden ve kaydını kaldıran makroları ekleyin. Örneğin, Eventdrv örneğinin (evntdrvEvents.h) üst bilgi dosyasında, ileti derleyicisi sağlayıcının adına göre makrolar oluşturur. Bildirimde Eventdrv örneği , sağlayıcının adı olarak "Örnek Sürücü" adını kullanır. İleti derleyicisi, sağlayıcıyı kaydetmek için sağlayıcının adını olay makrosıyla birleştirir, bu durumda EventRegisterSample_Driver.
// This is the generated header file envtdrvEvents.h // // ... // // // Register with ETW Vista + // #ifndef EventRegisterSample_Driver #define EventRegisterSample_Driver() McGenEventRegister(&DriverControlGuid, McGenControlCallbackV2, &DriverControlGuid_Context, &Sample_DriverHandle) #endifDriverEntry işlevinize EventRegister<sağlayıcı> makrosunu ekleyin. Bu işlevi, cihaz nesnesini oluşturan ve başlatan koddan sonra ekleyin. EventRegister sağlayıcı işlevine yapılan çağrıyı EventUnregister<><sağlayıcısı> çağrısıyla eşleştirmeniz gerektiğini unutmayın. Sürücünün kaydını sürücünüzün Unload* yordamında kaldırabilirsiniz.
// DriverEntry function // ... // Register with ETW // EventRegisterSample_Driver();Bildirimde belirttiğiniz olayları yazmak (yükseltmek) için oluşturulan kodu sürücünüzün kaynak dosyalarına ekleyin. Bildirimden derlediğiniz üst bilgi dosyası, sürücü için oluşturulan kodu içerir. İzleme iletilerini ETW'de yayımlamak için üst bilgi dosyasında tanımlanan EventWrite<olay> işlevlerini kullanın. Örneğin, aşağıdaki kod Eventdrv örneği için evntdrvEvents.h dosyasında tanımlanan olayların makrolarını gösterir.
Bu olayları yazmak için makrolara şu ad verilir:
EventWriteStartEvent,EventWriteSampleEventAveEventWriteUnloadEvent. Bu makroların tanımında görebileceğiniz gibi, makro tanımı otomatik olarak olayın etkinleştirilip etkinleştirilmediğini denetleyen bir EventEnabled<olay> makrosunda yer alır. Denetleme, olay etkin değilse yükün oluşturulması gereksinimini ortadan kaldırır./// // This is the generated header file envtdrvEvents.h // // ... // // Enablement check macro for StartEvent // #define EventEnabledStartEvent() ((Sample_DriverEnableBits[0] & 0x00000001) != 0) // // Event Macro for StartEvent // #define EventWriteStartEvent(Activity, DeviceNameLength, name, Status)\ EventEnabledStartEvent() ?\ Template_hzq(Sample_DriverHandle, &StartEvent, Activity, DeviceNameLength, name, Status)\ : STATUS_SUCCESS\ // // Enablement check macro for SampleEventA // #define EventEnabledSampleEventA() ((Sample_DriverEnableBits[0] & 0x00000001) != 0) // // Event Macro for SampleEventA // #define EventWriteSampleEventA(Activity)\ EventEnabledSampleEventA() ?\ TemplateEventDescriptor(Sample_DriverHandle, &SampleEventA, Activity)\ : STATUS_SUCCESS\ // // Enablement check macro for UnloadEvent // #define EventEnabledUnloadEvent() ((Sample_DriverEnableBits[0] & 0x00000001) != 0) // // Event Macro for UnloadEvent // #define EventWriteUnloadEvent(Activity, DeviceObjPtr)\ EventEnabledUnloadEvent() ?\ Template_p(Sample_DriverHandle, &UnloadEvent, Activity, DeviceObjPtr)\ : STATUS_SUCCESS\Oluşturduğunuz olaylar için kaynak kodunuza EventWrite<olay> makrolarını ekleyin. Örneğin, aşağıdaki kod parçacığı Eventdrv örneğindenDriverEntry yordamını gösterir. DriverEntry, sürücüyü ETW (EventRegisterSample_Driver) ile kaydetmek için makroları ve sürücü olayını ETW'ye (EventWriteStartEvent) yazmak için makroyu içerir.
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) /*++ Routine Description: Installable driver initialization entry point. This entry point is called directly by the I/O system. Arguments: DriverObject - pointer to the driver object RegistryPath - pointer to a unicode string representing the path to driver-specific key in the registry Return Value: STATUS_SUCCESS if successful STATUS_UNSUCCESSFUL otherwise --*/ { NTSTATUS Status = STATUS_SUCCESS; UNICODE_STRING DeviceName; UNICODE_STRING LinkName; PDEVICE_OBJECT EventDrvDeviceObject; WCHAR DeviceNameString[128]; ULONG LengthToCopy = 128 * sizeof(WCHAR); UNREFERENCED_PARAMETER (RegistryPath); KdPrint(("EventDrv: DriverEntry\n")); // // Create Dispatch Entry Points. // DriverObject->DriverUnload = EventDrvDriverUnload; DriverObject->MajorFunction[ IRP_MJ_CREATE ] = EventDrvDispatchOpenClose; DriverObject->MajorFunction[ IRP_MJ_CLOSE ] = EventDrvDispatchOpenClose; DriverObject->MajorFunction[ IRP_MJ_DEVICE_CONTROL ] = EventDrvDispatchDeviceControl; RtlInitUnicodeString( &DeviceName, EventDrv_NT_DEVICE_NAME ); // // Create the Device object // Status = IoCreateDevice( DriverObject, 0, &DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &EventDrvDeviceObject); if (!NT_SUCCESS(Status)) { return Status; } RtlInitUnicodeString( &LinkName, EventDrv_WIN32_DEVICE_NAME ); Status = IoCreateSymbolicLink( &LinkName, &DeviceName ); if ( !NT_SUCCESS( Status )) { IoDeleteDevice( EventDrvDeviceObject ); return Status; } // // Choose a buffering mechanism // EventDrvDeviceObject->Flags |= DO_BUFFERED_IO; // // Register with ETW // EventRegisterSample_Driver(); // // Log an Event with : DeviceNameLength // DeviceName // Status // // Copy the device name into the WCHAR local buffer in order // to place a NULL character at the end, since this field is // defined in the manifest as a NULL-terminated string if (DeviceName.Length <= 128 * sizeof(WCHAR)) { LengthToCopy = DeviceName.Length; } RtlCopyMemory(DeviceNameString, DeviceName.Buffer, LengthToCopy); DeviceNameString[LengthToCopy/sizeof(WCHAR)] = L'\0'; EventWriteStartEvent(NULL, DeviceName.Length, DeviceNameString, Status); return STATUS_SUCCESS; }
Oluşturduğunuz olaylar için tüm EventWrite<olay> makrolarını kaynak kodunuza ekleyin. Diğer iki makronun sürücü kaynak kodundaki olaylar için nasıl çağrıldığını görmek için Eventdrv örneğini inceleyebilirsiniz.
Sürücünün kaydını olay sağlayıcısı olarak, oluşturulan üst bilgi dosyasındaki EventUnregister<sağlayıcı> makrosunu kullanarak silin.
Bu işlev çağrısını sürücü kaldırma rutininize yerleştirin. EventUnregister<sağlayıcı> makrosunun çağrılmasından sonra izleme çağrısı yapılmamalıdır. İşlemle ilişkili geri çağırma işlevleri artık geçerli olmadığından, işlem kaldırıldığında olay sağlayıcısının kaydının silinememesi hatalara neden olabilir.
// DriverUnload function // ... // // Unregister the driver as an ETW provider // EventUnregisterSample_Driver();
5. Sürücüyü derleme
Araç manifestosunu projeye eklediyseniz ve ileti derleyicisi (MC.exe) özelliklerini yapılandırdıysanız, Visual Studio ve MSBuild kullanarak sürücü projesini veya çözümünü oluşturabilirsiniz.
Visual Studio'da sürücü çözümünü açın.
Derleme Çözümü'ne tıklayarak Derleme menüsünden örneği derleyin. Çözüm oluşturma hakkında daha fazla bilgi için bkz. Sürücü Oluşturma.
6. Bildirimi yükleyin
Olay tüketicilerinin (örneğin, Olay Günlüğü) olay meta verilerini içeren ikili dosyasının konumunu bulabilmesi için bildirimi hedef sisteme yüklemeniz gerekir. 3. Adımda sürücü projesine ileti derleyici görevini eklediyseniz, izleme bildirimi derlendi ve sürücüyü oluşturduğunuzda kaynak dosyaları oluşturuldu. Bildirimi yüklemek için Windows Olay Komut Satırı Yardımcı Programı'nı (Wevtutil.exe) kullanın. Bildirimi yüklemek için söz dizimi aşağıdaki gibidir:
wevtutil.exe imdrivermanifest
Örneğin, Evntdrv.sys örnek sürücüsünün bildirimini yüklemek için yükseltilmiş ayrıcalıklara sahip bir Komut İstemi penceresi açın (Yönetici olarak çalıştır) evntdrv.xml dosyasının bulunduğu dizine gidin ve aşağıdaki komutu girin:
Wevtutil.exe im evntdrv.xml
İzleme oturumunuz tamamlandığında, aşağıdaki söz dizimini kullanarak bildirimi kaldırın.
wevtutil.exe umsürücü manifestosu
Örneğin, Eventdrv örneğinin bildirimini kaldırmak için:
Wevtutil.exe um evntdrv.xml
7. ETW desteğini doğrulamak için sürücüyü test edin
Sürücüyü yükleyin. İzleme etkinliği oluşturmak için sürücüye alıştırma yapın. Sonuçları Olay Görüntüleyicisi'nde görüntüleyin. Olay izleme günlüklerini denetlemek, toplamak ve görüntülemek için Tracelog'u çalıştırabilir ve ardından olay izleme günlüklerini işlemeye yönelik bir araç olan Tracerpt'i çalıştırabilirsiniz.