Aracılığıyla paylaş


İzlemeleri kaydetmek için Inflight Trace Recorder (IFR)

Inflight Trace Recorder (IFR), çekirdek modu sürücüsü veya UMDF sürücüsü gibi bir izleme sağlayıcısının, en son günlük iletilerinin korunduğu bellek içi döngüsel arabellekler oluşturmasını sağlayan bir izleme özelliğidir. Günlük iletileri bir hata ayıklayıcı kullanılarak görüntülenebilir.

IFR, WPP yazılım izlemesinin üzerine kurulmuştur. WPP üzerinden IFR'nin birincil avantajı, otomatik olarak açılması ve izleme oturumlarını önceden başlatmanız gerekmemesidir.

Şunlar için geçerlidir:

  • En düşük işletim sistemi: KMDF ve WDM sürücü geliştiricileri için Windows 8
  • UMDF (2.15) sürücü geliştiricileri için en düşük işletim sistemi: Windows 10

Visual Studio'da Inflight Trace Recorder'ı etkinleştirme

İlk olarak, Windows Sürücüsüne WPP Yazılım İzleme Ekleme'deki adımları izleyin.

Ardından, Project özellik sayfasında, Yapılandırma Özellikleri-WPP> İzleme-İşlev ve> Makro Seçenekleri-Uçuş> İçi İzleme Kaydedicisi'ni Etkinleştir altında Evet'i seçin.

Son olarak, yalnızca UMDF için bir adım daha vardır: WPP İzleme->İşlev ve Makro Seçenekleri->Önişlemci Tanımlamaları altında WPP_MACRO_USE_KM_VERSION_FOR_UM=1 ekleyin.

Komut satırından Uçuş İçi İz Kaydedicisi'ni etkinleştirme

.vcxproj dosyasını el ile düzenlerseniz aşağıdaki girdileri ayarlayın:

KMDF veya WDM sürücüsü için:

    <ClCompile Include=...>
        <WppEnabled>true</WppEnabled>
        <WppKernelMode>true</WppKernelMode>
        <WppRecorderEnabled>true</WppRecorderEnabled>
        ...
    </ClCompile>

UMDF sürücüsü için:

    <ClCompile Include=...>
        <WppEnabled>true</WppEnabled>
        <WppRecorderEnabled>true</WppRecorderEnabled>
        <WppPreprocessorDefinitions>WPP_MACRO_USE_KM_VERSION_FOR_UM=1</WppPreprocessorDefinitions>
        ...
    </ClCompile>

Inflight Trace Recorder parametrelerini yapılandırma

Sürücünün Parametre anahtarı altında aşağıdaki isteğe bağlı kayıt defteri girdilerini ayarlayarak IFR'yi yapılandırabilirsiniz.

Aşağıdaki kayıt defteri girdilerini kullanın:

LogPages: REG_DWORD

Varsayılan günlüğü depolamak için sayfa sayısına ayarlayın. Varsayılan değer birdir.

VerboseOn: REG_DWORD

Varsayılan sıfır ayarı IFR'nin hataları, uyarıları ve bilgilendirici olayları günlüğe kaydetmesine neden olur. Günlüğe ayrıntılı çıktı eklemek için değerini bire ayarlayın.

WppRecorder_UseTimeStamp: REG_DWORD (WDK derlemesi 22557'den itibaren kullanılabilir)

Sürücüler, daha sonra !rcdrkd.rcdrlogdump veya !wdfkd.wdflogdump kullanılarak görüntülenebilir günlük girişlerine zaman damgaları eklemek için bu girdiyi bir olarak ayarlar.

WppRecorder_PreciseTimeStamp: REG_DWORD (WDK derlemesi 22557'den itibaren kullanılabilir)

Daha kesin zaman damgaları istiyorsanız, WppRecorder_UseTimeStamp ek olarak, yukarıda gösterilen söz dizimini kullanarak WppRecorder_PreciseTimeStamp ekleyin.

Örnekler

Aşağıdaki örneklerde, günlük sayfalarının sayısını iki olarak ayarlamak ve zaman damgalarını açmak için başlangıç ve bitiş açıklamaları arasındaki satırları ekleyin.

Çekirdek modu sürücüsü için:

[IfrSample_Service_Inst] 
DisplayName    = %IfrSample.SvcDesc%
ServiceType    = 1               ; SERVICE_KERNEL_DRIVER
StartType      = 3               ; SERVICE_DEMAND_START
ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
ServiceBinary  = %12%\IfrSample.sys
; =============== START
AddReg = IfrSample_Service_Inst.AddReg
 
[IfrSample_Service_Inst.AddReg]
HKR, "Parameters", "LogPages", %REG_DWORD%, 2
HKR, "Parameters", "WppRecorder_UseTimeStamp", %REG_DWORD%, 1
; =============== END

[Strings]
REG_DWORD = 0x00010001

UMDF sürücüsü için:

[IfrSampleUm_Install] 
UmdfLibraryVersion=$UMDFVERSION$
ServiceBinary=%13%\IfrSampleUm.dll
; =============== START
AddReg=IfrSampleUm_Install.AddReg
 
[IfrSampleUm_Install.AddReg]
HKR, "Parameters", "LogPages", %REG_DWORD%, 2
HKR, "Parameters", "WppRecorder_UseTimeStamp", %REG_DWORD%, 1
; =============== END

Varsayılan günlüğe izleme mesajları gönderme

Windows Sürücüsüne WPP Yazılım İzleme Ekleme başlığındaki yönergeleri izleyin. Örneğin:

  • DriverEntry'de WPP_INIT_TRACING(DriverObject, RegistryPath) çağırın.
  • EvtDriverUnload içinde WPP_CLEANUP(WdfDriverWdmGetDriverObject(Driver)) çağrı yapın.

Artık sürücü, izleme işlevini gerektiği gibi çağırabilir. Örneğin: TraceEvents(TRACE_LEVEL_ERROR, DBG_INIT, "WdfDriverCreate failed, %!STATUS!", ntStatus);

Daha fazla bilgi için bkz. WPP_INIT_TRACING ve WPP_CLEANUP.

Özelleştirilmiş bir günlüğe izleme mesajları gönderme

Bu yalnızca çekirdek modu sürücüleri (KMDF veya WDM) için geçerlidir.

Sürücülerin çoğu için tek bir varsayılan günlük yeterlidir. Ancak bazı senaryolarda, farklı varlıklar için ayrı günlük arabellekleri olması yararlı olur.

Örneğin, bir veri yolu sürücüsü yazılımı yazarken, her alt cihazın kendi arabelleği olmasını isteyebilirsiniz. Ardından hata ayıklayıcısını kullanarak yalnızca belirli bir alt cihaz için günlük dökümünü alabilirsiniz.

Özel günlükleri ayarlamak için sürücünün <WppRecorder.h> içermesi gerekir. Ardından aşağıdaki API'leri çağırın:

Sürücü ayrıca, log tanıtıcısını ilk parametre olarak alan yeni bir izleme makrosunu tanımlamalıdır. Bir örnek için bkz . Toaster Örnek Sürücüsü.

Özel bir günlüğe zaman damgası bilgileri ekleme

Sürücünüz ek günlük tanıtıcıları oluşturmak için WppRecorderLogCreate'u çağırırsa, bazı günlük tanıtıcıları için zaman damgalarını etkinleştirmek mümkündür, ancak diğerleri için etkinleştirilmez.

Bunu yapmak için, zaman damgalarını kullanması gereken her log tutacağı için sürücü koduna tek bir satır eklemelisiniz. Kod örneği için bkz . WppRecorderLogCreate.

Uyarı

Bu işlev, WDK derlemesi 22557'den itibaren kullanılabilir. Belirli bir sürümü hedefleme hakkında bilgi için bkz. Windows'un Farklı Sürümleri için Sürücü Oluşturma.

Hata ayıklayıcıda izleme iletilerini görüntüleme

KMDF ve UMDF sürücüleri için her zamanki gibi !wdfkd.wdflogdump kullanın. Hem çerçeve IFR günlüğünü hem de sürücü IFR günlüğünü yazdırır.

WDM sürücüleri için !rcdrkd.rcdrloglist ve !rcdrkd.rcdrlogdump kullanın.