Pourquoi Visual Studio 2005 génère-t-il les .pdb
fichiers lors de la compilation dans la version? Je ne déboguerai pas une version, alors pourquoi sont-elles générées?
Pourquoi Visual Studio 2005 génère-t-il les .pdb
fichiers lors de la compilation dans la version? Je ne déboguerai pas une version, alors pourquoi sont-elles générées?
Réponses:
Parce que sans les fichiers PDB, il serait impossible de déboguer une build "Release" par autre chose que le débogage au niveau de l'adresse. Les optimisations font vraiment un certain nombre sur votre code, ce qui rend très difficile de trouver le coupable en cas de problème (disons, une exception est levée). Même la définition de points d'arrêt est extrêmement difficile, car les lignes de code source ne peuvent pas être mises en correspondance une à une avec (ou même dans le même ordre que) le code d'assembly généré. Les fichiers PDB vous aident, vous et le débogueur, à faciliter considérablement le débogage post mortem.
Vous faites valoir que si votre logiciel est prêt à être publié, vous devriez avoir effectué tout votre débogage d'ici là. Bien que cela soit certainement vrai, il y a quelques points importants à garder à l'esprit:
Vous devez également tester et déboguer votre application (avant de la publier) à l'aide de la version "Release". En effet, l'activation des optimisations (elles sont désactivées par défaut dans la configuration "Debug") peut parfois provoquer des bogues subtils que vous n'auriez pas pu détecter autrement. Lorsque vous effectuez ce débogage, vous aurez besoin des symboles PDB.
Les clients signalent fréquemment des cas marginaux et des bogues qui n'apparaissent que dans des conditions "idéales". Ce sont des choses qui sont presque impossibles à reproduire en laboratoire car elles reposent sur une configuration délirante de la machine de cet utilisateur. S'ils sont des clients particulièrement utiles, ils signaleront l'exception qui a été levée et vous fourniront une trace de pile. Ou ils vous laisseront même emprunter leur machine pour déboguer votre logiciel à distance. Dans l'un ou l'autre de ces cas, vous souhaiterez que les fichiers PDB vous aident.
Le profilage doit toujours être effectué sur les versions "Release" avec les optimisations activées. Et encore une fois, les fichiers PDB sont utiles, car ils permettent de mapper les instructions d'assemblage profilées au code source que vous avez réellement écrit.
Vous ne pouvez pas revenir en arrière et générer les fichiers PDB après la compilation. * Si vous ne les créez pas pendant la construction, vous avez perdu votre chance. Cela ne fait rien de mal de les créer. Si vous ne souhaitez pas les distribuer, vous pouvez simplement les omettre de vos binaires. Mais si vous décidez plus tard de les vouloir, vous n'avez pas de chance. Mieux vaut toujours les générer et archiver une copie, juste au cas où vous en auriez besoin.
Si vous voulez vraiment les désactiver, c'est toujours une option. Dans la fenêtre Propriétés de votre projet, définissez l'option "Informations de débogage" sur "aucune" pour toute configuration que vous souhaitez modifier.
Prenez note, toutefois, que les configurations « Debug » et « Release » font par l' utilisation par défaut différents paramètres pour émettre des informations de débogage. Vous souhaiterez conserver ce paramètre. L'option "Informations de débogage" est définie sur "complet" pour une version de débogage, ce qui signifie qu'en plus d'un fichier PDB, les informations de symbole de débogage sont incorporées dans l'assembly. Vous obtenez également des symboles qui prennent en charge des fonctionnalités intéressantes telles que la modification et la poursuite. En mode Release, l'option "pdb-only" est sélectionnée, ce qui, comme cela sonne, inclut uniquement le fichier PDB, sans affecter le contenu de l'assemblage. Ce n'est donc pas aussi simple que la simple présence ou absence de fichiers PDB dans votre /bin
répertoire. Mais en supposant que vous utilisez l'option "pdb-only", le fichier PDB '
* Comme le souligne Marc Sherman dans un commentaire , tant que votre code source n'a pas changé (ou que vous pouvez récupérer le code d'origine à partir d'un système de contrôle de version), vous pouvez le reconstruire et générer un fichier PDB correspondant. Du moins, généralement. Cela fonctionne bien la plupart du temps, mais le compilateur n'est pas garanti de générer des binaires identiques chaque fois que vous compilez le même code , il peut donc y avoir de subtiles différences. Pire, si vous avez effectué des mises à niveau de votre chaîne d'outils entre-temps (comme l'application d'un service pack pour Visual Studio), les PDB sont encore moins susceptibles de correspondre. Garantir la génération fiable d' ex postfactoFichiers PDB, vous devez archiver non seulement le code source dans votre système de contrôle de version, mais également les fichiers binaires de l'ensemble de votre chaîne d'outils de génération pour vous assurer que vous pouvez recréer avec précision la configuration de votre environnement de génération. Il va sans dire qu'il est beaucoup plus facile de créer et d'archiver simplement les fichiers PDB.
.reload /i foo.dll
. Cela chargera foo.pdb même si foo.pdb a été créé après la libération de foo.dll.
La PDB peut être générée Release
aussi bien pour que pour Debug
. Il est défini sur (dans VS2010 mais dans VS2005 doit être similaire):
Projet → Propriétés → Générer → Avancé → Informations de débogage
Changez-le simplement en None
.
FileNotFoundException
), mais vous ne serez pas en mesure de voir une trace de la pile. Cela rend très difficile de déterminer exactement quelle ligne de code a provoqué la levée de l'exception.
Sans les fichiers .pdb, il est pratiquement impossible de parcourir le code de production; vous devez compter sur d'autres outils qui peuvent être coûteux et longs. Je comprends que vous pouvez utiliser le traçage ou windbg par exemple, mais cela dépend vraiment de ce que vous voulez réaliser. Dans certains scénarios, vous souhaitez simplement parcourir le code à distance (sans erreur ni exception) en utilisant les données de production pour observer un comportement particulier, et c'est là que les fichiers .pdb sont utiles. Sans eux, exécuter le débogueur sur ce code est impossible.
Pourquoi êtes-vous si sûr de ne pas déboguer les versions de versions? Parfois (j'espère rarement mais arrive), vous pouvez obtenir un rapport de défaut d'un client qui n'est pas reproductible dans la version de débogage pour une raison quelconque (horaires différents, petit comportement différent ou autre). Si ce problème semble être reproductible dans la version, vous serez heureux d'avoir le pdb correspondant.
Vous pouvez également utiliser des vidages sur incident pour déboguer votre logiciel. Le client vous l'envoie et vous pouvez ensuite l'utiliser pour identifier la version exacte de votre source - et Visual Studio tirera même le bon ensemble de symboles de débogage (et la source si vous êtes correctement configuré) à l'aide du vidage sur incident. Consultez la documentation de Microsoft sur les magasins de symboles .
Le fichier .PDB est le nom abrégé de "Program Database". Il contient les informations sur le point de débogage du débogueur et les ressources utilisées ou référencées. Son généré lorsque nous construisons en mode débogage. Son permet à l'application de déboguer au moment de l'exécution.
La taille est l'augmentation du fichier .PDB en mode débogage. Il est utilisé lorsque nous testons notre application.
Bon article du fichier pdb.
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
Dans une solution multi-projets, vous souhaitez généralement avoir une configuration qui ne génère aucun fichier PDB ou XML. Au lieu de changer la Debug Info
propriété de chaque projet none
, j'ai pensé qu'il serait plus judicieux d'ajouter un événement post-build qui ne fonctionne que dans une configuration spécifique.
Malheureusement, Visual Studio ne vous permet pas de spécifier différents événements post-génération pour différentes configurations. J'ai donc décidé de le faire manuellement, en modifiant le csproj
fichier du projet de démarrage et en ajoutant ce qui suit (au lieu de toute PostBuildEvent
balise existante ):
<PropertyGroup Condition="'$(Configuration)' == 'Publish'">
<PostBuildEvent>
del *.pdb
del *.xml
</PostBuildEvent>
</PropertyGroup>
Malheureusement, cela rendra la zone de texte de l'événement post-construction vide et y mettre quoi que ce soit peut avoir des résultats imprévisibles.
*.xml
fichiers, soyez prudent.
Symboles de débogage ( .pdb) et doc XML ( .xml) représentent un pourcentage important de la taille totale et ne doivent pas faire partie du package de déploiement normal. Mais il devrait être possible d'y accéder au cas où ils seraient nécessaires.
Une approche possible: à la fin du processus de génération TFS, déplacez-les vers un artefact distinct.
En fait, sans les fichiers PDB et les informations symboliques qu'ils possèdent, il serait impossible de créer un rapport de panne réussi (fichiers de vidage de mémoire) et Microsoft n'aurait pas l'image complète de la cause du problème.
Et donc avoir PDB améliore les rapports de plantage.