Partager via


Vidéo : Débogage de votre pilote avec le code source WDF

Cette rubrique contient un tutoriel vidéo qui montre comment déboguer votre pilote WDF (Windows Driver Frameworks) avec un accès complet au code source WDF. La vidéo suivante est la procédure pas à pas suivie dans la vidéo, pour une référence pratique.

Le débogage de la source WDF vous permet d’entrer librement dans le code d’infrastructure sans avoir à télécharger le code source WDF. Le débogueur télécharge automatiquement la version correcte de WDF à partir de GitHub.

Par exemple, si vous utilisez WinDbg pour déboguer votre pilote WDF sur un ordinateur Windows 10 et que le débogueur est défectueux avec du code d’infrastructure dans la pile d’appels, vous pouvez double-cliquer sur le cadre WDF dans la vue Pile des appels, et WinDbg télécharge et ouvre automatiquement le fichier source WDF approprié sur la ligne correspondante. Vous pouvez ensuite parcourir le code et définir des points d’arrêt.

Cette fonctionnalité est disponible pour les systèmes cibles exécutant des versions publiques de Windows 10, Technical Preview build 10041 ou version ultérieure. Ces builds ont des fichiers de symboles indexés de source privée pour KMDF (Wdf01000.sys) et UMDF (Wudfx02000.dll) disponibles sur le serveur de symboles publics Microsoft. Le débogage au niveau source du code WDF n’est disponible que dans WinDbg, et non dans le débogueur Visual Studio.

Démarrage rapide

Démarrez une session de débogage du noyau WinDbg sur l’ordinateur cible, arrêtez-vous, puis procédez comme suit :

  1. Définissez le chemin du symbole par défaut à l’aide de .symfix. Cela définit le chemin du symbole à pointer vers le serveur de symboles à l’emplacement https://msdl.microsoft.com/download/symbols.

    kd> .symfix

  2. Définissez le chemin d’accès source par défaut à l’aide de .srcfix. Cela définit le chemin d’accès source à srv*, ce qui indique au débogueur de récupérer les fichiers sources à partir des emplacements spécifiés dans les fichiers de symboles des modules cibles.

    kd> .srcfix
    Source search path is: SRV*
    
  3. Rechargez les symboles à l’aide de .reload et vérifiez que les symboles Wdf01000.sys (ou Wudfx02000.dll pour UMDF) sont indexés à la source. Comme indiqué dans la sortie de !lmi ci-dessous, le Wdf01000.sys PDB est indexé à la source. Si ce n’est pas le vôtre, consultez la section Installation de WinDbg ci-dessous.

    kd> .reload
    ...
    
    kd> !lmi wdf01000.sys
    Loaded Module Info: [wdf01000.sys] 
    ...
    Load Report: private symbols & lines, source indexed 
    C:\...\Wdf01000.pdb\...\Wdf01000.pdb
    
  4. Vous êtes prêt ! Un moyen simple de parcourir le code source WDF consiste à définir un point d’arrêt sur la routine de répartition IRP de l’infrastructure, puis à parcourir le reste du code. Étant donné qu’un système Windows a de nombreux pilotes KMDF de boîte de réception, WDF est toujours chargé et en cours d’exécution, de sorte que ce point d’arrêt est atteint immédiatement (sans avoir besoin de charger votre propre pilote).

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

Si cela ne fonctionne pas, case activée les étapes de configuration de WinDbg ci-dessous.

Configuration de WinDbg

Si l’exemple ci-dessus n’a pas fonctionné comme prévu, vous devrez peut-être suivre une ou plusieurs des instructions ci-dessous.

Activer le débogage en mode source

Assurez-vous que le débogage en mode source est activé. Ouvrez le menu Déboguer et vérifiez que le mode source est activé.

Effacer le cache des symboles obsolètes

Si vous avez précédemment débogué des pilotes WDF pour la même cible Windows, vous utilisez peut-être les symboles WDF mis en cache localement qui n’étaient pas indexés source. Vous pouvez case activée ceci avec la commande !lmi :

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

Selon le rapport de charge ci-dessus, Wdf01000.pdb n’est pas indexé source. Cela signifie que votre cache de symboles WinDbg local est obsolète. Pour résoudre ce problème, déchargez le PDB de WinDbg, effacez le cache local (votre chemin d’accès peut différer en fonction de la sortie !lmi ci-dessus) et rechargez le PDB :

kd> .reload /u Wdf01000.sys

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

kd> .reload Wdf01000.sys

Exécutez maintenant !lmi pour case activée à nouveau : le PDB doit apparaître en tant que source indexée et une fenêtre de code source doit apparaître.

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

Vous pouvez utiliser le débogage au niveau de la source WDF non seulement pour le débogage en direct et l’analyse des vidages sur incident, mais également pour en savoir plus sur les éléments internes de l’infrastructure en définissant des points d’arrêt sur les fonctions principales telles que le répartiteur IRP et en explorant les chemins de code suivants.