2008-09-16 9 views
41

J'ai entendu dire que l'utilisation de fichiers PDB peut aider à diagnostiquer l'endroit où un accident est survenu.
Mon de base de base est que vous donnez Visual Studio le fichier source, le fichier pdb et l'information de l'accident (de Dr Watson?)
Quelqu'un peut-il expliquer comment tout cela fonctionne/ce qui est impliqué? (Merci!)Comment utiliser les fichiers PDB

+0

Merci pour les réponses à ce jour (je vais laisser la question ouverte un peu plus) J'ai aussi trouvé cela utile: http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx – hamishmcn

Répondre

30

Les fichiers PDB sont générés lorsque vous générez votre projet. Ils contiennent des informations relatives aux binaires construits que Visual Studio peut interpréter.

Lorsqu'un programme se bloque et génère un rapport de blocage, Visual Studio peut prendre ce rapport et le lier au code source via le fichier PDB de l'application. Les fichiers PDB doivent être créés à partir du même fichier binaire qui a généré le rapport d'erreur!

Il y a quelques problèmes que nous avons rencontrés au fil du temps.

  • La machine qui débogue le rapport de panne doit avoir la source sur le même chemin que la machine qui a construit le binaire.
  • souvent optimiser versions Release dans la mesure où vous ne pouvez pas voir l'état des variables membres objet

Si quelqu'un sait comment vaincre l'ancien, je serais reconnaissant pour une entrée.

+5

Une façon d'aider avec le chemin du fichier source: utilisez SUBST pour mapper une lettre de lecteur à un répertoire particulier. http://technet.microsoft.com/en-us/library/bb491006.aspx – MarkJ

+0

La plupart des débogueurs que j'ai vus vous permettent également d'entrer des remplacements de chemins arbitraires - mais cela n'est peut-être pas disponible dans Visual Studio. Jamais essayé, mais c'est l'une de ces choses que vous devez généralement faire pour déboguer un programme compilé par quelqu'un d'autre. – jakobengblom2

34

Les fichiers PDB mappent le MSIL d'un assemblage aux lignes source d'origine. Cela signifie que si vous placez le PDB qui a été compilé avec l'assembly dans le même répertoire que l'assembly, vos traces de la pile d'exceptions auront les noms et les lignes des positions dans les fichiers source d'origine. Sans le fichier PDB, vous ne verrez que le nom de la classe et de la méthode pour chaque niveau de la trace de la pile.

+3

+1: Pour une bonne description de ce qu'une "base de données de programme" (PDB) contient. – AMissico

12

Vous devriez envisager de configurer un serveur de symboles et d'indexer les fichiers PDB sur votre système de contrôle de code source. Je viens juste de passer par ce processus pour notre produit et ça marche très bien. Vous n'avez pas à vous préoccuper de rendre les fichiers PDB disponibles avec les fichiers binaires, ni comment obtenir le code source approprié lors du débogage des fichiers de vidage.

livre de John Robbins: http://www.amazon.com/Debugging-Microsoft-NET-2-0-Applications/dp/0735622027/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1222366012&sr=8-1

Regardez ici pour un exemple de code pour générer minidumps (qui n'ont pas se limiter à l'analyse post-accident - vous pouvez les générer à tout moment dans votre code sans plantage): http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx

+0

Excellent lien sur la configuration d'un serveur de symboles source! Je pourrais juste faire ça. +1 pour le lien. – dotnetdev