Compartir a través de


Uso del registrador de eventos de Framework

WDF incluye un registrador de seguimiento interno, que a veces se denomina grabadora en curso (IFR) del marco. El registrador de WDF crea un registro de seguimiento que contiene un historial reciente de eventos para cada controlador WDF. Los registros de seguimiento realizan un seguimiento del progreso de los paquetes de solicitud de E/S (IRP) a través del marco y las solicitudes correspondientes a través de un controlador. Cada controlador Kernel-Mode Driver Framework (KMDF) y User-Mode Driver Framework (UMDF) tiene su propio registro.

El registrador WDF siempre está habilitado. Para cada registro de seguimiento, el registrador almacena los registros de eventos en un búfer de memoria circular. Opcionalmente, puede activar la detalle, lo que hace que el registrador de eventos registre información adicional que puede ayudarle a depurar el controlador, como entradas en o salidas de rutas de código internas. De forma predeterminada, el tamaño del búfer es una página de memoria y se desactiva la detalle. Puede cambiar el tamaño y el detalle del búfer ajustando estos valores en la aplicación WdfVerifier. Tenga en cuenta que activar la detalle puede degradar el rendimiento del sistema.

Puede usar extensiones del depurador de WDF para ver y guardar el registro de WDF durante la depuración interactiva. Para ver el registro de WDF durante una sesión de depuración:

  1. Cargue los símbolos correctos. Puede usar el comando .symfix+ debugger para anexar el almacén de símbolos públicos de Microsoft a la ruta de acceso del símbolo existente. El almacén de símbolos públicos incluye símbolos para los archivos binarios de WDF. También puede cargar símbolos para los símbolos del controlador.

    Para obtener información adicional sobre cómo obtener símbolos de ventana y cómo establecer la ruta de acceso del símbolo del depurador, consulte la documentación que se proporciona con el paquete de depuración de Windows .

  2. Cargue la biblioteca de extensionesWdfkd.dll en el depurador. Si usa el depurador de kernel, puede hacerlo mediante el comando .load . Para cargar la versión correcta de Wdfkd.dll debe especificar la ruta de acceso completa al archivo DLL. Por ejemplo, usaría la siguiente ruta de acceso en un equipo host del depurador basado en x86:

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

    A continuación, puede confirmar que la extensión se carga mediante el comando !chain para mostrar todas las extensiones cargadas.

    Para obtener más información sobre la extensión del depurador de marco, use la extensión !wdfhelp . Para obtener más información sobre el depurador de kernel, consulte la documentación que se proporciona con el paquete de depuración de Windows .

  3. Si el controlador usa la versión 1.11 o posterior del marco y usa el depurador de kernel de Windows 8 o posterior, puede omitir este paso.

    Si el controlador usa una versión de marco anterior a la 1.11, use !wdftmffile o !wdfsearchpath para especificar un archivo de formato de mensaje de seguimiento (.tmf) específico de la plataforma o una ruta de acceso a un archivo .tmf. Los archivos .tmf se encuentran en subdirectorios específicos de la plataforma en el WDK.

    Dado que los archivos .tmf son específicos de la versión, debe especificar un archivo .tmf que corresponda a la versión de la biblioteca en tiempo de ejecución del marco que se está ejecutando actualmente. Por ejemplo, si la versión 1.9 de KMDF se ejecuta en el equipo host:

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

    También puede establecer la ruta de acceso de búsqueda estableciendo la variable de entorno TRACE_FORMAT_SEARCH_PATH. El comando !wdftmffile tiene prioridad sobre la ruta de acceso de búsqueda establecida por la variable de entorno.

    Para comprobar el número de versión del marco, puede ejecutar el comando de extensión del depurador !wdfldr desde el depurador de kernel.

  4. Use la extensión !wdflogdump para mostrar los registros del registrador de eventos. Por ejemplo, la siguiente captura de pantalla de una ventana de comandos de WinDbg muestra un ejemplo típico de la salida de !wdflogdump:

    Captura de pantalla de la salida de la extensión !wdflogdump en la ventana Comando de WinDbg.

Cada línea del registro del marco está precedida por una cadena denominada prefijo del mensaje de seguimiento. El registrador de seguimiento antepone este prefijo a cada mensaje que se escribe en el registro. De forma predeterminada, el prefijo incluye un conjunto estándar de elementos de datos, pero puede cambiar los elementos predeterminados para que se adapten a sus requisitos concretos. Puede cambiar la cadena de prefijo de un controlador WDF estableciendo la variable de entorno TRACE_FORMAT_PREFIX o mediante el comando de extensión del depurador !wdfsettraceprefix .

Para establecer la variable de entorno, use un comando similar al siguiente:

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

Este comando establece el prefijo del mensaje de seguimiento en lo siguiente:

SourceFile_LineNumber: FunctionName: ProcessID.ThreadID: SystemTime

También puede usar el comando de extensión !wdflogsave para guardar los registros del registrador de eventos en un archivo de registro de seguimiento de eventos (.etl) que puede ver mediante TraceView.

A veces, puede usar la extensión del depurador !wdfcrashdump en un volcado de memoria para mostrar información de registro después de que se compruebe el error del sistema. La información de registro solo está disponible en el volcado de memoria si el marco puede determinar que el controlador ha provocado la comprobación de errores o si ha establecido el valor del Registro ForceLogsInMiniDump para el controlador.

Si se adjunta un depurador cuando se produce la comprobación de errores, puede usar !wdfcrashdump para ver la información del registro inmediatamente o puede ver la información cargando el archivo de volcado de memoria. Debido a las limitaciones de tamaño de un archivo de volcado de memoria pequeño, es posible que el registro del controlador que provocó el bloqueo no aparezca en el volcado de memoria.

El marco de trabajo puede determinar si un controlador determinado causó los siguientes códigos de comprobación de errores:

A partir de la versión 2 de UMDF, UMDF almacena el registro de seguimiento de UMDF (o IFR de UMDF) en la memoria no paginada del kernel. El marco asigna una instancia IFR por host de controlador (Wudfhost).

Para obtener más información sobre los comandos de extensión del depurador, vea Debugger Extensions for Framework-based Drivers.