Libération de la génération.fichiers pdb, pourquoi?

pourquoi Visual Studio 2005 génère-t-il les fichiers .pdb lors de la compilation en release? Je ne vais pas déboguer une version, alors pourquoi sont-ils générés?

233
demandé sur niico 2011-03-28 13:34:39

8 réponses

parce que sans les fichiers PDB, il serait impossible de déboguer une compilation "Release" par autre chose que du débogage au niveau de l'adresse. optimisations font vraiment un nombre sur votre code, ce qui rend très difficile de trouver le coupable si quelque chose va mal (par exemple, une exception est lancée). Même le réglage des points de rupture est extrêmement difficile, parce que les lignes de code source ne peuvent pas être appariées un à un avec (ou même dans le même ordre que) le code d'assemblage généré. APB les fichiers vous aident ainsi que le débogueur, ce qui rend le déboguage post-mortem beaucoup plus facile.

Vous faites le point si votre logiciel est prêt pour la diffusion, vous devriez avoir fait tous vos débogage. Bien que cela soit certainement vrai, il y a quelques points importants à garder à l'esprit:

  1. Vous devriez aussi tester et déboguer votre application (avant la libération) à l'aide de la "Libération" de construire. C'est parce que le fait d'activer les optimisations (elles sont désactivées par défaut dans la configuration "Debug") peut parfois faire apparaître des bugs subtils que vous n'auriez pas pu attraper autrement. Quand vous faites ce débogage, vous voulez les symboles de PDB.

  2. les clients signalent fréquemment des cas de bordures et des bogues qui ne apparaissent que dans des conditions "idéales". Ce sont des choses qui sont presque impossibles à reproduire en laboratoire parce qu'elles reposent sur une configuration que l'ordinateur de l'utilisateur. S'ils sont particulièrement utiles, ils signaleront l'exception qui a été lancé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 aurez besoin des fichiers PDB pour vous aider.

  3. Profilage toujours être fait sur la "Libération" construit avec les optimisations activées. Et encore une fois, les fichiers PDB sont utiles, parce qu'ils permettent aux instructions d'assemblage qui sont profilées d'être mappées vers le code source que vous avez réellement écrit.

Vous ne pouvez pas revenir en arrière et de générer les fichiers PDB après le compiler. * si vous ne les créez pas pendant la construction, vous avez perdu votre opportunité. Il ne fait pas de mal rien de les créer. Si vous ne voulez pas les distribuer, vous pouvez simplement les omettre de vos binaires. Mais si vous décidez plus tard que vous les Voulez, vous n'avez pas de chance. il est préférable de toujours les générer et archiver une copie, juste au cas où vous en auriez besoin.

si vous voulez vraiment les éteindre, c'est toujours une option. Dans la fenêtre Propriétés de votre projet, définissez l'option "Debug Info" à "none" pour toute configuration que vous voulez modifier.

notez, cependant, que le "Debug" et "Release" configurations faire par par défaut, utilisez différents paramètres pour l'émission des informations de débogage. Vous voudrez garder ce cadre. L'option" Debug Info "est définie à" full " pour une construction de débogage, ce qui signifie qu'en plus d'un fichier PDB, les informations du symbole de débogage sont intégrées dans l'assemblage. Vous obtenez également des symboles qui supportent des fonctionnalités cool comme edit-and-continue. En mode Release, l'option" pdb-only " est sélectionnée, qui, comme on le dirait, n'inclut que le fichier PDB, sans affecter le contenu de l'Assemblée. Il n'est donc pas aussi simple que la simple présence ou absence de fichiers PDB dans votre répertoire /bin . Mais en supposant que vous utilisiez l'option "pdb-only", la présence du fichier PDB n'affectera en aucune façon les performances d'exécution de votre code.

* comme Marc Sherman le souligne dans un commentaire , tant que votre code source n'a pas changé (ou que vous pouvez récupérer le code original à partir d'un système de contrôle de version), vous pouvez le reconstruire et de générer un correspondant de fichier PDB. Au moins, en général. 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 , donc il peut être des différences subtiles. Pire, si vous avez fait des mises à jour à votre chaîne d'outils entre-temps (comme appliquer un service pack pour Visual Studio), Les PDB sont encore moins susceptibles de correspondre. Pour garantir la production fiable de ex postfacto fichiers PDB, vous aurez besoin d'archiver non seulement le code source dans votre système de contrôle de version, mais aussi les binaires pour l'ensemble de votre chaîne d'outils de construction pour vous assurer que vous pouvez recréer avec précision la configuration de votre environnement de construction. Il va sans dire qu'il est beaucoup plus facile de simplement créer et archiver les fichiers PDB.

376
répondu Cody Gray 2017-05-23 11:47:26

PDB peut être généré pour Release ainsi que pour Debug . Ceci est fixé à (en VS2010 mais en VS2005 doit être similaire):

ProjectPropertiesBuildAdvancedDebug Info

il suffit de le remplacer par None .

77
répondu Aliostad 2017-08-20 05:00:20

sans le .fichiers pdb il est pratiquement impossible de passer en revue le code de production; il faut compter sur d'autres outils qui peuvent être coûteux en temps et en argent. Je comprends que vous pouvez utiliser le traçage ou windbg par exemple, mais cela dépend vraiment de ce que vous voulez accomplir. Dans certains scénarios, vous voulez simplement passer à travers le code à distance (pas d'erreurs ou d'exceptions) en utilisant les données de production pour observer un comportement particulier, et c'est là .les fichiers pdb sont utiles. Sans eux, l'exécution de l' débogueur sur ce code est impossible.

8
répondu user1714880 2012-11-29 11:18:55

Pourquoi êtes-vous si sûr de ne pas déboguer les constructions de publication? Parfois (avec un peu de chance, rarement, mais cela 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, petits comportements différents ou n'importe quoi d'autre). Si ce problème semble être reproductible dans la compilation de la version, vous serez heureux d'avoir le pdb correspondant.

7
répondu jdehaan 2011-03-28 09:41:37

aussi, vous pouvez utiliser des dumps crash pour déboguer votre logiciel. Le client vous l'envoie et ensuite vous pouvez l'utiliser pour identifier la version exacte de votre source - et Visual Studio tirera même le bon jeu de symboles de débogage (et la source si vous êtes configuré correctement) en utilisant le crash dump. Voir Microsoft documentation sur les magasins de symboles .

4
répondu rlranft 2015-01-19 23:04:24

.Le fichier PDB est le nom court de"base de données de programme". Il contient les informations sur le point de débogage pour le débogueur et les ressources qui sont utilisées ou de référence. Il est généré lorsque nous construisons en mode debug. Son application permet de déboguer à l'exécution.

la taille est augmentée de .Fichier PDB en mode debug. Il est utilisé lorsque nous testons notre application.

pas besoin de ce fichier lors de la libération ou du déploiement. Bon article du dossier de l'APB.

http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P

2
répondu Ajay2707 2014-05-23 05:34:05

dans une solution multi-projets, vous voulez généralement avoir une configuration qui ne génère aucun fichier PDB ou XML. Au lieu de changer la propriété Debug Info de chaque projet en none , j'ai pensé qu'il serait plus opportun d'ajouter un événement post-construction qui ne fonctionne que dans une configuration spécifique.

malheureusement, Visual Studio ne vous permet pas de spécifier différents événements post-construction pour différentes configurations. J'ai donc décidé de le faire manuellement, par éditer le fichier csproj du projet de démarrage et ajouter ce qui suit (au lieu de toute étiquette PostBuildEvent existante):

  <PropertyGroup Condition="'$(Configuration)' == 'Publish'">
    <PostBuildEvent>
        del *.pdb
        del *.xml
    </PostBuildEvent>
  </PropertyGroup>

malheureusement, cela rendra la boîte aux lettres textbox vide et y mettre quoi que ce soit peut avoir des résultats imprévisibles.

1
répondu GregRos 2015-12-29 21:36:48

les symboles de Débogage ( .pdb) et XML doc ( .les fichiers xml représentent un pourcentage important de la taille totale et ne devraient pas faire partie du paquet de déploiement régulier. Mais il devrait être possible d'y accéder en cas de besoin.

une approche possible: à la fin du processus de construction du TFS, déplacez-les vers un artefact séparé.

0
répondu Mark Johanes 2017-11-07 13:11:23