Comment utiliser WinDbg pour analyser un fichier de vidage?
Voici quelques étapes générales qui vous permettront de progresser:
Tout d'abord, vous devez modifier les paramètres de votre compilateur afin qu'il crée des fichiers PDB, même pour les versions. Les versions ultérieures du compilateur Visual C++ le font par défaut, mais dans de nombreuses versions de Visual C++, vous devez le faire vous-même. Créez des fichiers de base de données de programme, puis conservez une archive de ces fichiers avec chaque génération de votre application. Il est essentiel que chaque génération de vos applications dispose de son propre ensemble de PDB. Vous ne pouvez pas simplement réutiliser les mêmes que ceux que vous avez créés avec la build 10 pour examiner les vidages générés par la build 15, par exemple. Au cours de la vie de votre projet, vous vous retrouverez avec une tonne de PDB, alors soyez prêt pour cela.
Ensuite, vous devez être en mesure d'identifier la version exacte de votre application qui a généré le fichier de vidage. Si vous créez vos propres MiniDumps (en appelant MiniDumpWriteDump () par exemple), la façon la plus simple de le faire est probablement de faire simplement partie du nom de fichier du MiniDump le numéro de version complet de votre application. Vous aurez besoin d'un schéma de numérotation de version raisonnable pour que cela fonctionne. Dans ma boutique, nous incrémentons le numéro de build dans toutes les branches d'une fois à chaque fois que le constructeur automatique crée une build.
Maintenant que vous avez reçu le fichier de vidage du client, vous connaissez la version précise de l'application qui a créé le vidage et vous avez trouvé les fichiers PDB pour cette génération.
Vous devez maintenant parcourir l'historique de votre contrôle de code source et trouver le code source de cette version exacte du logiciel. La meilleure façon de procéder consiste à appliquer des "étiquettes" à vos branches chaque fois que vous effectuez une construction. Définissez la valeur de l'étiquette sur le numéro de version exact, et cela devient facile à trouver dans l'historique.
Vous êtes presque prêt à lancer WinDbg/Visual C++:
c:\app_build_1.0.100
pour l'application version 1.0 build # 100.Vous disposez maintenant de deux options pour afficher le fichier de vidage. Vous pouvez utiliser Visual Studio ou WinDbg. L'utilisation de Visual Studio est plus facile, mais WinDbg est beaucoup plus puissant. La plupart du temps, les fonctionnalités de Visual Studio suffisent.
Pour utiliser Visual Studio, il vous suffit d'ouvrir le fichier de vidage comme s'il s'agissait d'un projet. Une fois ouvert, "exécutez" le fichier de vidage (F5 par défaut) et si tous les chemins sont définis correctement, vous serez dirigé directement vers le code qui s'est écrasé, vous aurez une pile d'appels, etc.
Pour utiliser WinDbg, vous devez sauter à travers quelques cerceaux:
.symfix
. Cela peut prendre quelques instants car cela entraînera une tonne de choses sur Internet..sympath+ c:\pdblocation
, en remplaçant où vous placez les fichiers PDB pour le chemin d'accès. Assurez-vous d'obtenir le signe plus sans espace entre .sympath
et le +
signe, sinon vous bousillerez l'étape 3..srcpath c:\app_build_1.0.100
en remplaçant le chemin où vous avez obtenu le code du contrôle de code source par cette version du logiciel.!analyze -v
Après quelques instants, si tout est correctement configuré, WinDbg vous amènera directement à l'emplacement de votre crash. À ce stade, vous avez un million d'options pour creuser profondément dans l'espace mémoire de votre application, l'état des sections critiques, des fenêtres, etc. Mais c'est bien au-delà la portée de ce poste.
Bonne chance!
(voir les sections "Dump" ci-dessous)
Comprendre le fonctionnement des espaces de travail ...
Un "cmdtree" vous permet de définir un "menu" de commandes de débogage pour un accès facile aux commandes fréquemment utilisées sans avoir à se rappeler les noms des commandes laconiques.
Vous n'avez pas besoin de mettre toutes les définitions de commandes dans le même fichier texte cmdtree .... vous pouvez les garder séparées et en charger plusieurs si vous le souhaitez (elles obtiennent alors leur propre fenêtre).
Vous pouvez utiliser l'option -c sur la ligne de commande pour exécuter automatiquement un script WinDBG lorsque vous démarrez WinDBG.
Donne la possibilité d'activer le mode DML (langage de balisage du débogueur), de charger des extensions particulières, de définir des points d'arrêt d'exception .NET, de définir des indicateurs de noyau (par exemple, lors du débogage du noyau, vous devrez peut-être modifier le masque DbgPrint pour voir les informations de suivi .... ed nt ! Kd_DEFAULT_Mask 0xffffffff), charger les cmdtrees, etc.
Un exemple de script:
$$ Include a directory to search for extensions
$$ (point to a source controlled or UNC common directory so that all developers get access)
.extpath+"c:\svn\DevTools\WinDBG\Extensions"
$$ When debugging a driver written with the Windows Driver Framework/KMDF
$$ load this extension that comes from the WinDDK.
!load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf
$$ load some extensions
.load msec.dll
.load byakugan.dll
.load odbgext.dll
.load sosex
.load psscor4
$$ Make commands that support DML (Debugger Markup Language) use it
.prefer_dml 1
.dml_start
$$ Show NTSTATUS codes in hex by default
.enable_long_status 1
$$ Set default extension
.setdll psscor4
$$ Show all loaded extensions
.chain /D
$$ Load some command trees
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt
$$ Show some help for the extensions
!wdfkd.help
!psscor4.help
.help /D
Les "extensions" vous permettent d'étendre la gamme de commandes/fonctionnalités prises en charge dans WinDBG.
Certains blogs (mélange de débogage de code natif et géré).
C'est une question vraiment large.
!analyze -v
pour y effectuer une analyse de base. Vous devez disposer d'informations sur les symboles pour votre code pour que les fichiers de vidage en valent la peine.Le site Web vidage de la mémoire, trace de logiciel, débogage, logiciel malveillant, portail Victimware et Intelligence Intelligence a été très informatif pour moi. J'ai aussi beaucoup apprécié le livre, Advanced Windows Debugging de Mario Hewardt et Daniel Pravat.
Tess Ferrandez a n grand ensemble de tutoriels de base et de laboratoires pour commencer avec Windbg. Je les recommande vivement.