Compartir a través de


Vídeo: Depuración del controlador de software 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 práctica.

La depuración de origen de WDF permite depurar libremente el código de marco sin necesidad de descargar el 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 una máquina Windows 10 y el depurador se interrumpe con 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 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, la vista previa técnica de la versión de 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 con WinDbg en la máquina de destino, interrumpa la ejecución y siga estos pasos:

  1. Establezca la ruta de acceso de símbolo predeterminada mediante .symfix. Esto configura la ruta de acceso de los símbolos 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 utilizando la opción .srcfix. Esto configura la ruta de origen a srv*, lo que indica al depurador recuperar los archivos de origen desde 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 los símbolos mediante .reload, y confirme que los símbolos Wdf01000.sys (o Wudfx02000.dll para UMDF) se indexan a partir del origen. Como se muestra en la salida de !lmi a continuación, el Wdf01000.sys PDB está indexado por origen. Si el tuyo no es así, consulta 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 incluidos, WDF siempre se carga y ejecuta, por lo que este punto de interrupción se activará de inmediato (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 siguientes.

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.

Habilitar la depuración en Modo Fuente

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 previamente ha depurado controladores WDF para el mismo objetivo de Windows, es posible que esté usando los símbolos WDF almacenados en caché local que no fueron indexados al 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 corregir esto, descargue la PDB de WinDbg, borre la caché local (la ruta de acceso puede diferir según el resultado del comando !lmi mencionado anteriormente) 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 comprobar: la PDB debe 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.