Использование средства ведения журнала событий платформы

WDF включает внутреннее средство ведения журнала трассировки, иногда называемое платформой in-flight Recorder (IFR). Средство ведения журнала WDF создает журнал трассировки, содержащий недавний журнал событий для каждого драйвера WDF. Журналы трассировки отслеживают ход выполнения пакетов запросов ввода-вывода (IRP) через платформу и соответствующие запросы через драйвер. Каждый драйвер Kernel-Mode Driver Framework (KMDF) и User-Mode Driver Framework (UMDF) имеет собственный журнал.

Средство ведения журнала WDF всегда включено. Для каждого журнала трассировки средство ведения журнала сохраняет записи событий в циклический буфер памяти. При необходимости можно включить детализацию, что приводит к тому, что средство ведения журнала событий записывает дополнительные сведения, которые могут помочь в отладке драйвера, например записи в пути к внутреннему коду или выходы из них. По умолчанию размер буфера составляет одну страницу памяти, а детализация отключена. Вы можете изменить размер и детализацию буфера, изменив эти значения в приложении WdfVerifier. Обратите внимание, что включение детализации может снизить производительность системы.

Расширения отладчика WDF можно использовать для просмотра и сохранения журнала WDF во время интерактивной отладки. Чтобы просмотреть журнал WDF во время сеанса отладки:

  1. Загрузите правильные символы. Вы можете использовать команду отладчика .symfix+ для добавления общедоступного хранилища символов Майкрософт в существующий путь к символам. Общедоступное хранилище символов содержит символы для двоичных файлов WDF. Вы также можете загрузить символы для символов драйвера.

    Дополнительные сведения о том, как получить символы Окна и как задать путь к символам отладчика, см. в документации, поставляемой вместе с пакетом отладки Windows .

  2. Загрузите библиотеку расширенийWdfkd.dll в отладчик. Если вы используете отладчик ядра, это можно сделать с помощью команды .load . Чтобы загрузить правильную версию Wdfkd.dll необходимо указать полный путь к библиотеке DLL. Например, на хост-компьютере отладчика на базе x86 следует использовать следующий путь:

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

    Затем можно убедиться, что расширение загружено, с помощью команды !chain для отображения всех загруженных расширений.

    Для получения дополнительных сведений о расширении отладчика платформы используйте расширение !wdfhelp . Дополнительные сведения об отладчике ядра см. в документации, поставляемой вместе с пакетом отладки Windows .

  3. Если драйвер использует платформу 1.11 или более поздней версии, а вы используете отладчик ядра из Windows 8 или более поздней версии, этот шаг можно пропустить.

    Если драйвер использует версию платформы, более раннюю, чем 1.11, используйте !wdftmffile или !wdfsearchpath , чтобы указать формат сообщения трассировки (TMF-файл) для конкретной платформы или путь к TMF-файлу. TMF-файлы находятся в подкаталогах конкретной платформы в WDK.

    Так как TMF-файлы зависят от версии, необходимо указать TMF-файл, соответствующий версии библиотеки среды выполнения платформы, которая выполняется в данный момент. Например, если KMDF версии 1.9 выполняется на хост-компьютере:

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

    Вы также можете задать путь поиска, задав переменную среды TRACE_FORMAT_SEARCH_PATH. Команда !wdftmffile имеет приоритет над путем поиска, заданным переменной среды.

    Чтобы проверить номер версии платформы, можно выполнить команду расширения отладчика !wdfldr из отладчика ядра.

  4. Используйте расширение !wdflogdump для отображения записей средства ведения журнала событий. Например, на следующем снимке экрана окна команды WinDbg показан типичный пример выходных данных !wdflogdump:

    Снимок экрана: выходные данные расширения !wdflogdump в окне команды WinDbg.

Каждой строке в журнале платформы предшествует строка, которая называется префиксом сообщения трассировки. Средство ведения журнала трассировки добавляет этот префикс к каждому сообщению, записанному в журнал. По умолчанию префикс включает стандартный набор элементов данных, но вы можете изменить элементы по умолчанию в соответствии с конкретными требованиями. Вы можете изменить строку префикса для драйвера WDF, задав переменную среды TRACE_FORMAT_PREFIX или с помощью команды расширения отладчика !wdfsettraceprefix .

Чтобы задать переменную среды, используйте следующую команду:

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

Эта команда задает префикс сообщения трассировки следующим образом:

SourceFile_LineNumber: FunctionName: ProcessID.ThreadID: SystemTime

Вы также можете использовать команду расширения !wdflogsave , чтобы сохранить записи средства ведения журнала событий в файле журнала трассировки событий (.etl), который можно просмотреть с помощью TraceView.

Иногда можно использовать расширение отладчика !wdfcrashdump в аварийном дампе для отображения сведений журнала после проверки системных ошибок. Сведения журнала доступны в аварийном дампе, только если платформа может определить, что драйвер вызвал ошибку проверка или если для драйвера задано значение реестра ForceLogsInMiniDump.

Если при возникновении проверка ошибок подключен отладчик, можно использовать !wdfcrashdump для немедленного просмотра сведений журнала или просмотреть сведения, загрузив файл дампа памяти. Из-за ограничений размера небольшого файла дампа памяти журнал драйвера, вызвавшего сбой, может не отображаться в дампе.

Платформа может определить, вызвал ли конкретный драйвер следующие коды ошибок проверка:

Начиная с UMDF версии 2, UMDF сохраняет журнал трассировки UMDF (или UMDF IFR) в памяти ядра без страниц. Платформа выделяет по одному ifr на экземпляр узла драйвера (Wudfhost).

Дополнительные сведения о командах расширения отладчика см. в разделе Расширения отладчика для драйверов на основе платформы.