2010-09-07 24 views
13

J'ai un minidump Windows (code C) et un fichier exe correspondant. Malheureusement, je n'ai pas les fichiers .pdb correspondant exactement, mais j'ai .pdbs qui contiennent exactement le même code que construit juste à un moment différent. En Windbg, je peux utiliser:Est-il possible de charger des symboles incompatibles dans Visual Studio?

.symopt+0x40 

Pour lui dire de charger n'importe quoi, même des fichiers de symboles incompatibles. Cela fonctionne très bien dans ce cas particulier, et je suis en mesure d'obtenir une pile d'appel appropriée. Je suis juste curieux de savoir si Visual Studio a une telle fonctionnalité. Nous utilisons ici à peu près toutes les versions différentes de VS, peu importe la version dans laquelle il se trouve. Merci.

+0

Cela ne répond pas vraiment à votre question, mais vous vous feriez une énorme faveur en standardisant un ensemble cohérent d'outils de développement. –

+1

Nous avons un ensemble cohérent. C'est juste que nous prenons en charge les anciennes versions de notre logiciel et qu'il ne valait pas la peine de porter les anciennes versions du logiciel sur les versions plus récentes de Visual Studio. – Morinar

Répondre

4

Il n'y a pas de dérogation, mais l'affiche à this question a trouvé un moyen de modifier les fichiers PDB pour les faire correspondre le fichier EXE.

Merci à l'un des commentaires sur la première réponse, je vérifié un lien vers les pdfs du livre « Undocumented Windows 2000 Secrets: Un livre de recettes Les programmeurs ». Et l'auteur va dans grand détail sur le format de fichier pdb . Comme je l'ai déjà dit, j'avais déjà chargé le pdb dans un éditeur hexadécimal et retourné quelques bits autour de apparaissant que j'ai fait le match d'âge/signature, mais il n'a pas de travail. Eh bien, après avoir utilisé l'utilitaire du livre secrets W2K pour "exploser" le pdb dans les flux inclus, je découvert qu'ils cachent une autre référence à l'âge dans le flux 3 !!!!!!! Une fois que j'ai retourné celui-ci comme , il correspondait à windbg.

Je ne sais pas si vous voulez aller à tant de mal, mais il semble que cela peut être fait. Si c'est pour le soutien à la production, cela pourrait valoir la peine.

+0

J'ai fini par travailler sur ce problème, mais je veux accepter une réponse car je n'aime pas que mon taux de réponse soit inférieur à 100% ;-) Celui-ci semble avoir l'information la plus utile, donc je l'accepte. – Morinar

0

Selon this post son possible d'utiliser sos windbg commandes aussi bien en studio visuel. Mais je ne suis pas sûr si ".symopt" tombe également dans cette catégorie.

18

Essayez this utility:

ChkMatch utilitaire peut être utilisé pour vérifier si une information exécutable et le débogage match de fichier. Il peut également être utilisé pour appliquer la correspondance entre un fichier d'informations exécutable et de débogage, si elles sont compatibles.

Pour plus d'informations sur la correspondance des informations de débogage et les questions connexes, voir ce article.

formats d'information de débogage pris en charge: DBG, PDB 2.0, APB 7.0 ...

+1

Ceci devrait être la réponse acceptée. –

+1

Cela devrait absolument être la réponse acceptée. – SashaZh

+0

Je seconde cela, c'est la solution. –

3

rencontres Visual Studio et WinDBG PDB en comparant les horodateurs dans l'en-tête avec Executable magasin horodatages dans le fichier pdb. Vous pouvez afficher l'horodatage en exécutant dumpin/headers.

Je ne l'ai pas utilisé chkmatch mais en modifiant soit l'exe ou pdb pour correspondre à l'autre devrait fonctionner correctement.

Soyez conscient que cette technique peut ne pas être suffisant pour déboguer votre binaire.John Robbins dans son livre 'Debugging Windows' (que je peux recommander) mentionne qu'il a vu des résultats de construction différents de l'arbre source identique construit à des moments presque identiques.

Toujours construire des symboles pdb avec vos builds (y compris les versions de release) et les archiver avec les produits de construction et inclure le fichier .map pour faire bonne mesure.