Compartir a través de


Vídeo: Depuración del controlador con código fuente de WDF

Este tema contiene un tutorial de vídeo que muestra cómo depurar el controlador de Windows Driver Frameworks (WDF) con acceso completo al código fuente de WDF. Después del vídeo se muestra el procedimiento paso a paso seguido en el vídeo, para una referencia cómoda.

La depuración de código fuente de WDF permite pasar libremente al código de marco sin necesidad de descargar código fuente de WDF. El depurador descarga automáticamente la versión correcta de WDF desde GitHub.

Por ejemplo, si usa WinDbg para depurar el controlador WDF en un equipo de Windows 10 y el depurador se interrumpe con el código de marco en la pila de llamadas, puede hacer doble clic en el marco WDF en la vista Pila de llamadas y WinDbg descarga automáticamente y abre el archivo de origen de WDF correspondiente en la línea coincidente. A continuación, puede recorrer el código y establecer puntos de interrupción.

Esta característica está disponible para los sistemas de destino que ejecutan versiones públicas de Windows 10, technical Preview compilación 10041 o posterior. Estas compilaciones tienen archivos de símbolos indexados de origen privado para KMDF (Wdf01000.sys) y UMDF (Wudfx02000.dll) disponibles en el servidor de símbolos públicos de Microsoft. La depuración de nivel de origen del código WDF solo está disponible en WinDbg y no en el depurador de Visual Studio.

Inicio rápido

Inicie una sesión de depuración del kernel de WinDbg en la máquina de destino, interrumpa y siga estos pasos:

  1. Establezca la ruta de acceso de símbolo predeterminada mediante .symfix. Esto establece la ruta de acceso del símbolo para que apunte al servidor de símbolos en https://msdl.microsoft.com/download/symbols.

    kd> .symfix

  2. Establezca la ruta de acceso de origen predeterminada mediante .srcfix. Esto establece la ruta de acceso de origen a srv*, que indica al depurador que recupere los archivos de origen de las ubicaciones especificadas en los archivos de símbolos de los módulos de destino.

    kd> .srcfix
    Source search path is: SRV*
    
  3. Vuelva a cargar símbolos mediante .reload y confirme que los símbolos de Wdf01000.sys (o Wudfx02000.dll para UMDF) están indexados de origen. Como se muestra en la salida de !lmi siguiente, el Wdf01000.sys PDB está indexado de origen. Si el suyo no es así, consulte la sección Configuración de WinDbg a continuación.

    kd> .reload
    ...
    
    kd> !lmi wdf01000.sys
    Loaded Module Info: [wdf01000.sys] 
    ...
    Load Report: private symbols & lines, source indexed 
    C:\...\Wdf01000.pdb\...\Wdf01000.pdb
    
  4. Ahora ya está listo. Una manera sencilla de recorrer el código fuente de WDF es establecer un punto de interrupción en la rutina de distribución de IRP del marco y, a continuación, recorrer el resto del código. Dado que un sistema Windows tiene muchos controladores KMDF de bandeja de entrada, WDF siempre se carga y se ejecuta, por lo que este punto de interrupción se alcanzará inmediatamente (sin necesidad de cargar su propio controlador).

    kd> bp Wdf01000!FxDevice::DispatchWithLock
    kd> g
    Breakpoint 0 hit
    Wdf01000!FxDevice::DispatchWithLock:
    87131670 8bff mov edi,edi 
    

Si esto no funciona, consulte los pasos de configuración de WinDbg que se indican a continuación.

Configuración de WinDbg

Si el ejemplo anterior no funcionaba según lo previsto, es posible que tenga que realizar una o varias de las instrucciones siguientes.

Habilitación de la depuración en modo de origen

Asegúrese de que la depuración en modo de origen está habilitada. Abra el menú Depurar y confirme que el modo de origen está activado.

Borrar caché de símbolos obsoletos

Si ha depurado previamente los controladores WDF para el mismo destino de Windows, es posible que esté usando los símbolos WDF almacenados en caché local que no se indizaron de origen. Puede comprobarlo con el comando !lmi:

kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, not source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb

Según el informe de carga anterior, Wdf01000.pdb no está indexado de origen. Esto significa que la caché de símbolos de WinDbg local está obsoleta. Para corregirlo, descargue la PDB de WinDbg, borre la memoria caché local (la ruta de acceso puede diferir en función de la salida !lmi anterior) y vuelva a cargar la PDB:

kd> .reload /u Wdf01000.sys

CMD> del
C:\...\Wdf01000.pdb\...\Wdf01000.pdb

kd> .reload Wdf01000.sys

Ahora ejecute !lmi para volver a comprobarlo: la PDB debería aparecer como indexada de origen y debería aparecer una ventana de código fuente.

kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb 

Puede usar la depuración de nivel de origen de WDF no solo para la depuración en vivo y el análisis de volcados de memoria, sino también para obtener más información sobre los elementos internos del marco estableciendo puntos de interrupción en funciones principales como el distribuidor irP y explorando las rutas de acceso de código posteriores.