Comment utiliser WinDbg pour analyser le crash dump de L'application VC++?

comment utiliser WinDbg pour analyser un fichier dump?

38
demandé sur John Dibling 2009-04-09 17:38:22

4 réponses

voici quelques étapes générales qui vous feront avancer:

tout d'abord, vous devez modifier les paramètres de votre compilateur afin qu'il crée des fichiers PDB, même pour les compilations release. 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 gardez une archive de ces fichiers avec chaque construction de votre application. Il est essentiel que tous les construire des applications a son propre ensemble de Pdb. Vous ne pouvez pas simplement réutiliser les mêmes que vous avez fait avec build 10 pour examiner les dumps générés par build 15, par exemple. Pendant la durée de votre projet, vous finirez avec une tonne de PDB, alors soyez prêt pour ça.

ensuite, vous devez être en mesure d'identifier la version exacte de votre application qui a généré le fichier dump. Si vous créez votre propre MiniDumps (en appelant Minidumprwritedump () pour exemple), probablement la façon la plus simple de faire cela est de simplement faire une partie du nom de fichier du MiniDump le numéro de version complet de votre application. Vous aurez besoin d'avoir un système de numérotation de version raisonnable en place pour que cela fonctionne. Dans mon atelier, nous incrémentons le nombre de construction dans toutes les branches d'une fois chaque fois que l'autobuilder crée une construction.

maintenant que vous avez reçu le fichier dump du client, vous connaissez la version exacte de l'application qui a créé le dump, et vous avez trouvé les fichiers PDB pour cette construction.

Maintenant vous devez passer en revue l'histoire de votre contrôle source et trouver le code source pour cette version exacte du logiciel. La meilleure façon de le faire est d'appliquer des "étiquettes" à vos branches à chaque fois que vous faire un build. Définissez la valeur de l'étiquette au numéro de version exact, et il devient facile à trouver dans l'histoire.

Vous êtes presque prêt à feu de WinDbg/Visual C++:

  1. obtenez l'arborescence complète des sources pour cette version de votre application. Mettez-le dans un endroit séparé sur votre disque dur, dites c:\app_build_1.0.100 pour la version d'application 1.0 construire #100.
  2. récupérez les binaires pour la version exacte de votre application et mettez-les quelque part sur votre disque dur. Il pourrait être plus facile d'installer simplement cette version de votre application pour obtenir les binaires.
  3. place les fichiers de L'APB au même endroit que le binaires à l'étape 2.

Maintenant, vous avez deux options pour visualiser le fichier dump. Vous pouvez utiliser Visual Studio ou WinDbg. Utiliser Visual Studio est plus facile, mais WinDbg est beaucoup plus puissant. La plupart du temps, la fonctionnalité de Visual Studio suffira.

pour utiliser Visual Studio, Tout ce que vous avez à faire est d'ouvrir le fichier dump comme si c'était un projet. Une fois ouvert, "lancer" le fichier dump ( F5 par défaut) et si tous les chemins sont définis correctement, cela vous mènera directement au code qui s'est écrasé, vous donnera une pile d'appels, etc.

Pour utiliser WinDbg, vous devez sauter à travers quelques cerceaux:

  1. Démarrer WinDbg
  2. ouvrir le fichier dump. ( Ctrl + D par défaut)
  3. dites à WinDbg d'aller chercher les fichiers Microsoft symbol corrects. Type .symfix . Cela peut prenez quelques instants qu'il va tirer une tonne de choses de l'Internet.
  4. dites à WinDbg où sont les symboles (fichiers PDB). Tapez .sympath+ c:\pdblocation , en remplaçant les fichiers PDB par le chemin d'accès. Assurez-vous d'obtenir le signe plus là-dedans avec aucun espace blanc entre .sympath et le signe + sinon vous allez rater l'étape 3.
  5. dites à WinDbg où est le code source. Tapez .srcpath c:\app_build_1.0.100 en remplaçant le chemin où vous avez le code de source control pour cette version du logiciel.
  6. dites à WinDbg d'analyser le fichier. Type !analyze -v

Après quelques instants, si tout est correctement configuré, WinDbg, vous l'emplacement de votre accident. À 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, fenêtres, etc. Mais c'est chemin au-delà de la la portée de ce post.

bonne chance!

64
répondu John Dibling 2015-07-03 10:08:50

(voir les sections" Dump "ci-dessous)

tutoriels de base et démonstrations d'utilisation de WinDbg

Différentes Manières de "Démarrer"/Joindre WinDBG

espaces de travail

Comprendre comment les espaces de travail...

Cmdtree

Un "cmdtree" vous permet de définir un "menu" de commandes du débogueur pour faciliter l'accès aux commandes fréquemment utilisées sans avoir à vous rappeler l'laconique noms de commande.

You ne mettez pas toutes les définitions de commande dans le même fichier texte cmdtree....vous pouvez les séparer et en charger plusieurs si vous le souhaitez (ils auront alors leur propre fenêtre).

Script De Démarrage

vous pouvez utiliser l'option-c sur la ligne de commande pour exécuter automatiquement un script WinDBG lorsque vous démarrez WinDBG.

donne l'occasion d'activer le mode DML (Debugger markup language), load extensions particulières, points de rupture de l'exception .net, options du noyau (par exemple, lors du débogage du noyau, vous pourriez avoir besoin de changer le masque DbgPrint pour voir les informations de traçage....ed nt!Kd_DEFAULT_Mask 0xffffff), load 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:\WinDDK00.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK00.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

Commande Tricher Feuilles

Extensions

"Extensions" vous permettent d'étendre la gamme de commandes/fonctionnalités prises en charge à L'intérieur de WinDBG.

écrivez la vôtre extension

utilisant WinDBG pour déboguer le code géré

Scripting (C#, PS, Python, WinDBG)

débogueurs/outils qui utilisent le dbgeng.dll API/outils WinDBG

différentes façons de générer un crash Dump Fichiers pour analyse Post-Mortem

L'Analyse De L'Image Outils

  • BlueScreenView - trouve le minidiump .les fichiers DMP sauvegardés par Windows après un BSOD, et des extraits des informations sur ce qui a causé la crash
  • Debug.Analyseur (peut analyser les fichiers dump et les plug-ins peuvent être écrits en .NET)
  • TRISTE - Simple Après Vidage (post-mortem de l'analyseur)
  • "15197450920 la" Volatilité - cadre pour l'analyse de la "mémoire" enregistré dans les fichiers de vidage ( cheat sheet )

Dump outils associés

Débogage Du Noyau Machines Virtuelles

  • VMKD - machine virtuelle KD Extensions
  • VirtualKD - (débogueur de noyau de support pour OS hébergé dans VMWare/VirtualBox)

Vidéos

Blogs

quelques blogs (mélange de débogage de code natif et géré).

Avancé des Articles et des Ressources Tutoriel

D'Autres Débogueurs

Autres Liens

30
répondu Colin Smith 2017-05-23 11:47:00

C'est une question très large.

  1. la première étape consiste à charger le fichier dump dans une instance WinDbg.
  2. ensuite, vous devez vous assurer que vous avez une configuration de symboles.
  3. enfin, vous pouvez exécuter la commande !analyze -v pour obtenir une analyse de base effectuée sur elle. Vous avez besoin d'avoir des informations de symbole disponibles pour votre code pour rendre les fichiers dump valables.

le site Vidage de la Mémoire, Logiciels de Trace, le Débogage, les logiciels Malveillants, Victimware et l'Analyse du Renseignement Portail a été très instructif pour moi. J'ai aussi vraiment apprécié le livre, "Advanced Windows Debugging de Mario Hewardt et Daniel Pravat.

4
répondu LanceSc 2013-02-13 18:04:50

Tess Ferrandez a un grand ensemble de tutoriels de base et les laboratoires pour commencer avec Windbg. Je les recommande fortement.

3
répondu womp 2013-02-13 18:07:13