Condividi tramite


Uso del Logger dell'evento di Framework

WDF include un logger di traccia interno, talvolta denominato Registratore in volo del framework (IFR). Il logger WDF crea un log di traccia che contiene una cronologia recente di eventi per ogni driver WDF. I log di traccia tengono traccia dello stato di avanzamento dei pacchetti di richieste di I/O tramite il framework e le richieste corrispondenti tramite un driver. Ogni driver Kernel-Mode Driver Framework (KMDF) e User-Mode Driver Framework (UMDF) ha il proprio log.

Il logger WDF è sempre abilitato. Per ogni log di traccia, il logger archivia i record eventi in un buffer di memoria circolare. Facoltativamente, è possibile attivare la verbosità, che causa il logger di eventi di registrare informazioni aggiuntive che consentono di eseguire il debug del driver, ad esempio le voci in o uscire dai percorsi di codice interni. Per impostazione predefinita, le dimensioni del buffer sono una pagina di memoria e la verbosità viene disattivata. È possibile modificare le dimensioni e la verbosità del buffer modificando questi valori all'interno dell'applicazione WdfVerifier. Si noti che l'attivazione della verbosità potrebbe ridurre le prestazioni del sistema.

È possibile usare le estensioni del debugger WDF per visualizzare e salvare il log WDF durante il debug interattivo. Per visualizzare il log WDF durante una sessione di debug:

  1. Caricare i simboli corretti. È possibile usare il comando debugger con estensione symfix+ per aggiungere l'archivio simboli pubblico Microsoft al percorso del simbolo esistente. L'archivio simboli pubblici include simboli per i file binari WDF. È anche possibile caricare i simboli per i simboli del driver.

    Per altre informazioni su come ottenere simboli finestra e come impostare il percorso del simbolo del debugger, vedere la documentazione fornita con il pacchetto Debug di Windows .

  2. Caricare la libreria di estensioniWdfkd.dll nel debugger. Se si usa il debugger del kernel, è possibile eseguire questa operazione usando il comando .load . Per caricare la versione corretta di Wdfkd.dll è necessario specificare il percorso completo della DLL. Ad esempio, si userà il percorso seguente in un computer host del debugger basato su x86:

    .load "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\wdfkd.dll"
    

    È quindi possibile verificare che l'estensione venga caricata usando il comando !chain per visualizzare tutte le estensioni caricate.

    Per altre informazioni sull'estensione del debugger del framework, usare l'estensione !wdfhelp . Per altre informazioni sul debugger del kernel, vedere la documentazione fornita con il pacchetto debug di Windows .

  3. Se il driver usa framework versione 1.11 o successiva e si usa il debugger del kernel da Windows 8 o versione successiva, è possibile ignorare questo passaggio.

    Se il driver usa una versione del framework precedente alla versione 1.11, usare !wdftmffile o !wdfsearchpath per specificare un file di messaggio di traccia specifico della piattaforma (.tmf) o un percorso di un file con estensione tmf. I file con estensione tmf si trovano nelle sottodirectory specifiche della piattaforma in WDK.

    Poiché i file con estensione tmf sono specifici della versione, è necessario specificare un file tmf corrispondente alla versione della libreria di runtime del framework attualmente in esecuzione. Ad esempio, se KMDF versione 1.9 è in esecuzione nel computer host:

    !wdftmffile c:\WinDDK\<version>\tools\tracing\x86\wdf01009.tmf
    

    È anche possibile impostare il percorso di ricerca impostando la variabile di ambiente TRACE_FORMAT_SEARCH_PATH. Il comando !wdftmffile ha la precedenza sul percorso di ricerca impostato dalla variabile di ambiente.

    Per verificare il numero di versione del framework, è possibile eseguire il comando di estensione del debugger !wdfldr dal debugger del kernel.

  4. Usare l'estensione !wdflogdump per visualizzare i record del logger dell'evento. Ad esempio, lo screenshot seguente di una finestra comando WinDbg mostra un esempio tipico dell'output di !wdflogdump:

    Screenshot dell'output dell'estensione !wdflogdump nella finestra comando WinDbg.

Ogni riga del log del framework è preceduta da una stringa denominata prefisso del messaggio di traccia. Il logger di traccia prependa questo prefisso a ogni messaggio scritto nel log. Per impostazione predefinita, il prefisso include un set standard di elementi di dati, ma è possibile modificare gli elementi predefiniti in base ai requisiti specifici. È possibile modificare la stringa di prefisso per un driver WDF impostando la variabile di ambiente TRACE_FORMAT_PREFIX oppure usando il comando di estensione del debugger !wdfsettraceprefix .

Per impostare la variabile di ambiente, usare un comando simile al seguente:

Set TRACE_FORMAT_PREFIX=%2!s!: %!FUNC!: %8!04x!.%3!04x!: %4!s!:

Questo comando imposta il prefisso del messaggio di traccia sul seguente:

SourceFile_LineNumber: FunctionName: ProcessID.ThreadID: SystemTime

È anche possibile usare il comando estensione !wdflogsave per salvare i record del logger dell'evento in un file di traccia eventi (con estensione etl) che è possibile visualizzare usando TraceView.

A volte è possibile usare l'estensione del debugger !wdfcrashdump in un dump di arresto anomalo per visualizzare le informazioni di log dopo i controlli dei bug di sistema. Le informazioni di log sono disponibili nel dump dell'arresto anomalo solo se il framework può determinare che il driver ha causato il controllo del bug o se è stato impostato il valore del Registro di sistema ForceLogsInMiniDump per il driver.

Se un debugger viene collegato quando si verifica il controllo dei bug, è possibile usare !wdfcrashdump per visualizzare immediatamente le informazioni di log oppure è possibile visualizzare le informazioni caricando il file di dump della memoria. A causa delle limitazioni delle dimensioni di un file di dump di memoria di piccole dimensioni, il log per il driver che ha causato l'arresto anomalo potrebbe non essere visualizzato nel dump.

Il framework può determinare se un determinato driver ha causato i codici di controllo di bug seguenti:

A partire da UMDF versione 2, UMDF archivia il log di traccia UMDF (o UMDF IFR) nel kernel non a pagina memoria. Il framework alloca un'istanza IFR per host del driver (Wudfhost).

Per altre informazioni sui comandi dell'estensione del debugger, vedere Estensioni debugger per driver basati su Framework.