Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique contient un didacticiel vidéo qui montre comment déboguer votre pilote WDF (Windows Driver Frameworks) avec un accès total au code source WDF. Après la vidéo, voici la procédure pas à pas suivie dans la vidéo, pour référence pratique.
Le débogage source WDF vous permet de naviguer librement dans le code du framework 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 rompu avec le code d’infrastructure dans la pile des 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 source privé 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 et procédez comme suit :
Définissez le chemin de symboles par défaut à l’aide de .symfix. Cette opération définit le chemin d’accès des symboles pour qu’il pointe vers le serveur de symboles à l’adresse https://msdl.microsoft.com/download/symbols.
kd> .symfixDéfinissez le chemin source par défaut à l’aide de .srcfix. Cela définit le chemin d’accès source à srv*, qui indique au débogueur de récupérer les fichiers sources à partir d’emplacements spécifiés dans les fichiers de symboles des modules cibles.
kd> .srcfix Source search path is: SRV*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, la Wdf01000.sys PDB est indexée à partir de la source. Si le vôtre n’est pas, 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.pdbVous êtes prêt ! Un moyen simple de parcourir le code source WDF consiste à définir un point d’arrêt sur la routine de distribution IRP du framework, 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. Ce point d’arrêt est donc atteint immédiatement (sans avoir à 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, consultez les étapes de configuration de WinDbg ci-dessous.
Installation de WinDbg
Si l’exemple ci-dessus ne fonctionnait pas comme prévu, vous devrez peut-être effectuer une ou plusieurs des instructions ci-dessous.
Activer le débogage en mode source
Vérifiez que le débogage en mode source est activé. Ouvrez le menu Débogage 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 à partir des sources. Vous pouvez vérifier cela 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é à la source. Cela signifie que votre cache de symboles WinDbg local est obsolète. Pour résoudre ce problème, déchargez la base de données PDB à partir de WinDbg, effacez le cache local (votre chemin peut différer en fonction de la sortie !lmi ci-dessus) et rechargez la base de données PDB :
kd> .reload /u Wdf01000.sys
CMD> del
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
kd> .reload Wdf01000.sys
Exécutez maintenant !lmi pour vérifier à nouveau : la base de données PDB doit apparaître en tant que source indexée et une fenêtre de code source doit s’afficher.
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 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 du framework en définissant des points d’arrêt sur les fonctions principales comme le répartiteur IRP et en explorant les chemins de code qui suivent.