Condividi tramite


Uso del Logger di Eventi del Framework

WDF include un logger di traccia interno, talvolta denominato In-Flight Recorder (IFR) del framework. 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 un 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 porta il logger di eventi a registrare informazioni aggiuntive utili per il debug del driver, come l'accesso o l'uscita dai percorsi di codice interni. Per impostazione predefinita, la dimensione del buffer è una pagina di memoria e il livello di dettaglio è impostato su disattivato. È possibile modificare le dimensioni e il livello di dettaglio del buffer modificando questi valori all'interno dell'applicazione WdfVerifier. Si noti che l'attivazione della verbosità potrebbe compromettere 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 di WDF durante una sessione di debug:

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

    Per altre informazioni su come ottenere i simboli window e su come impostare il percorso del simbolo del debugger, vedere la documentazione fornita con il pacchetto di 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 utilizzerà il seguente percorso su una macchina host del debugger basata 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 di 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 1.11, usare !wdftmffile o !wdfsearchpath per specificare un file di messaggio di traccia specifico della piattaforma (con estensione 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 con estensione 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 del comando WinDbg.

Ogni riga nel log del framework è preceduta da una stringa chiamata prefisso del messaggio di traccia. Il logger di traccia antepone questo prefisso a ogni messaggio scritto nel log. Per impostazione predefinita, il prefisso include un set standard di elementi 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 !wdfsettraceprefix dell'estensione del debugger.

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 !wdflogsave extension per salvare i record del logger dell'evento in un file di log 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 del sistema per visualizzare le informazioni di log dopo i controlli dei bug di sistema. Le informazioni di log sono disponibili nel dump di arresto anomalo del sistema solo se il framework può determinare che il driver ha causato la verifica dei 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 di dimensioni di un file di dump della 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 dei bug seguenti:

A partire dalla versione 2 di UMDF, UMDF archivia il log di traccia UMDF (o UMDF IFR) nella memoria non di paging del kernel. Il framework alloca un'istanza IFR per ogni host del driver (Wudfhost).

Per altre informazioni sui comandi di estensione del debugger, vedere Estensioni del debugger per driver basati su framework.