Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
WDF включает внутренний журнал трассировки, иногда называемый фреймворка (IFR). Средство ведения журнала WDF создает журнал трассировки, содержащий недавнюю историю событий для каждого драйвера WDF. Журналы трассировки отслеживают прохождение пакетов запросов ввода-вывода (IRPs) через фреймворк и соответствующие запросы через драйвер. Каждый драйвер Kernel-Mode Driver Framework (KMDF) и User-Mode Driver Framework (UMDF) имеет собственный журнал.
Система ведения журнала WDF всегда включена. Для каждого журнала трассировки логгер сохраняет записи событий в циклический буфер памяти. При необходимости можно включить повышенную подробность, что приведёт к записи событийным регистратором дополнительной информации, которая поможет в отладке драйвера, например, при входе или выходе из внутренних участков кода. По умолчанию размер буфера — одна страница памяти, а детализация отключена. Вы можете изменить размер и детализацию буфера, настроив эти значения в приложении WdfVerifier . Обратите внимание, что включение детализации может снизить производительность системы.
Расширения отладчика WDF можно использовать для просмотра и сохранения журнала WDF во время интерактивной отладки. Чтобы просмотреть журнал WDF во время сеанса отладки, выполните следующие действия.
Загрузите правильные символы. Вы можете использовать команду .symfix+ отладчик для добавления общедоступного хранилища символов Майкрософт к существующему пути символов. Общедоступное хранилище символов содержит символы для двоичных файлов WDF. Возможно, вам также следует загрузить символы для драйверов.
Дополнительные сведения о том, как получить символы Windows и как задать путь к символам отладчика, см. в документации, предоставленной пакетом отладки Windows .
Загрузите библиотеку расширений Wdfkd.dll в отладчик. Если вы используете отладчик ядра, это можно сделать с помощью команды .load. Чтобы загрузить правильную версию Wdfkd.dll, необходимо указать полный путь к DLL. Например, на хост-компьютере отладчика на основе x86 используется следующий путь:
.load "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\wdfkd.dll"
Затем можно убедиться, что расширение загружено с помощью команды !chain для отображения всех загруженных расширений.
Чтобы получить дополнительные сведения о расширении отладчика платформы, используйте расширение !wdfhelp. Дополнительные сведения об отладчике ядра см. в документации, предоставленной пакетом отладки Windows.
Если драйвер использует платформу версии 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 из отладчика ядра.
Используйте расширение !wdflogdump для отображения записей средства ведения журнала событий. Например, на следующем снимке экрана в командном окне WinDbg показан типичный пример вывода данных !wdflogdump:
Каждая строка в журнале фреймворка предваряется строкой, которая называется префиксом сообщения трассировки . Логгер трассировки добавляет этот префикс в начале каждого сообщения, записанного в журнал. По умолчанию префикс включает стандартный набор элементов данных, но вы можете изменить элементы по умолчанию в соответствии с конкретными требованиями. Вы можете изменить строку префикса для драйвера 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 для просмотра сведений журнала немедленно или просмотреть сведения, загрузив файл дампа памяти. Из-за ограничений размера небольшого файла дампа памяти журнал драйвера, вызвавшего сбой, может не отображаться в дампе.
Платформа может определить, вызвал ли конкретный драйвер следующие коды проверки ошибок:
- проверка ошибок 0xD1: DRIVER_IRQL_NOT_LESS_OR_EQUAL
- проверка ошибок 0xA: IRQL_NOT_LESS_OR_EQUAL
- Код проверки ошибок 0x20: KERNEL_APC_PENDING_DURING_EXIT
- проверка ошибок 0x8E: KERNEL_MODE_EXCEPTION_NOT_HANDLED
- Проверка ошибок 0x1E: KMODE_EXCEPTION_NOT_HANDLED
- проверка ошибок 0x50: PAGE_FAULT_IN_NONPAGED_AREA
- Проверка ошибок 0x7E: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
Начиная с версии UMDF 2, UMDF хранит журнал трассировки UMDF (или UMDF IFR) в некэшированной памяти ядра. Платформа выделяет один экземпляр IFR на каждую сессию хоста драйвера (Wudfhost).
Дополнительные сведения о командах расширения отладчика см. в разделе "Расширения отладчика для драйверов на основе фреймворка".