J'ai tout un tas de minidumps qui ont été enregistrés pendant l'exécution d'une application via MiniDumpWriteDump. Les minidumps ont été créés sur une machine avec une version de système d'exploitation différente de celle de ma machine de développement.Comment extraire des traces de pile de minidumps?
Maintenant j'essaye d'écrire un programme pour extraire des traces de pile des minidumps, using dbghelp.dll. Je marche MINIDUMP_MODULE_LIST et appelle SymLoadModule64, mais cela ne parvient pas à télécharger les pdbs (kernel32 etc.) à partir du serveur de symboles publics. Si j'ajoute "C: \ Windows \ System32" au chemin du symbole, il trouve les dll et télécharge les symboles, mais bien sûr ils ne correspondent pas aux dll du minidump, donc les résultats sont inutiles.
Alors, comment puis-je dire dbghelp.dll pour télécharger et utiliser le bon pdbs?
[modifier]
J'ai oublié de dire que SymLoadModule64 ne prend un nom de fichier et aucune information de version/contrôle, donc évidemment avec SymLoadModule64 seul, il est impossible de comprendre dbghelp qui pdb à télécharger.
Les informations sont actuellement disponibles dans MINIDUMP_MODULE_LIST mais je ne sais pas comment les transmettre à l'API dbghelp. Il y a SymLoadModuleEx qui prend des paramètres supplémentaires, mais je n'ai aucune idée si c'est ce dont j'ai besoin ou ce que je devrais passer pour les paramètres supplémentaires.
[modifier]
Pas de chance jusqu'à présent, mais je l'ai remarqué il y a aussi dbgeng.dll distribués avec dbghelp.dll dans le SDK de débogage. MSDN semble assez bien documenté et dit que c'est le même moteur que Windbg. Peut-être que je peux l'utiliser pour extraire les traces de la pile.
Si quelqu'un peut me diriger vers une introduction à l'utilisation de dbgeng.dll pour traiter les minidumps, cela aiderait probablement aussi, car le MSDN ne documente que les composants individuels mais pas comment ils fonctionnent ensemble.
Vous avez peut-être fait de vous minidump trop mini. Bricoler avec l'argument DumpType. Assurez-vous que la liste Debug + Windows + Modules affiche un chemin DLL, une version et un horodatage précis. –
Non, ce n'est pas un problème, je peux très bien charger les minidumps dans WinDbg et il télécharge correctement les PDB. C'est juste que je veux automatiser la récupération de la pile au lieu d'inspecter les dumps manuellement dans WinDbg. – Zarat
Si vous voulez aller la route de piratage, vous pouvez simplement passer des commandes à ntsd et capturer la sortie –