Partager via


Débogage d’un échec User-Mode avec KD

Pour déboguer correctement les échecs en mode utilisateur, vous avez besoin de CDB ou WinDbg. Toutefois, parfois, une exception en mode utilisateur se décompose en KD, car aucun débogueur en mode utilisateur n’est présent. Il est également parfois utile de surveiller ce que font des processus spécifiques en mode utilisateur lors du débogage d’un problème en mode noyau.

Par défaut, le débogueur du noyau tente de charger le premier symbole du mode utilisateur qui correspond à l’adresse spécifiée (pour une commande k, u ou ln ).

Malheureusement, les symboles en mode utilisateur ne sont souvent pas spécifiés dans le chemin du symbole ou le premier symbole n’est pas le bon. Si les symboles ne sont pas présents, copiez-les dans le chemin du symbole ou utilisez une commande .sympath (Définir le chemin du symbole) pour pointer vers l’arborescence de symboles complète, puis utilisez la commande .reload (recharger le module). Si le symbole incorrect est chargé, vous pouvez charger explicitement un symbole en effectuant un fichier binaire .reload <binary.ext>.

La plupart des DLL Windows sont rebasées de sorte qu’elles se chargent à différentes adresses, mais il existe des exceptions. Les cartes vidéo sont les exceptions les plus courantes. Il existe des dizaines de cartes vidéo qui se chargent toutes à la même adresse de base, de sorte que KD trouvera presque toujours ati.dll (le premier symbole vidéo, alphabétiquement). Pour la vidéo, il existe également un fichier .sys chargé qui peut être identifié à l’aide de la commande lm . Avec ces informations, vous pouvez émettre un fichier .reload pour obtenir les DLL vidéo appropriées. Il arrive également que le débogueur soit confus et que le rechargement de symboles spécifiques aide à fournir la pile correcte. Désassemblez les fonctions pour voir si les symboles sont corrects.

Comme pour les DLL vidéo, presque tous les exécutables se chargent à la même adresse, de sorte que KD signale l’accès. Si vous voyez une trace de pile dans access, effectuez un processus !process , puis un .reload du nom exécutable donné. Si l’exécutable n’a pas de symboles dans le chemin d’accès aux symboles, copiez-les à cet emplacement et effectuez à nouveau le rechargement .

Parfois, KD ou WinDbg a des difficultés à charger les symboles appropriés en mode utilisateur, même lorsque l’arborescence de symboles complète se trouve dans le chemin des symboles. Dans ce cas, ntdll.dll et kernel32.dll sont deux des symboles les plus courants qui seraient requis. Dans le cas du débogage de CSRSS à partir de KD, winsrv.dll et csrsrv.dll sont également des DLL courantes à charger.