Qu'est-ce qu'un fichier PDB?

252

Qu'est-ce qu'un fichier PDB et comment puis-je l'exclure du dossier de publication lorsque je reconstruis ma solution?

À
la source
17
pdb est un fichier de base de données de programme et il est créé lors de la compilation. Ce fichier contient des informations de débogage et d'état du projet qui permettent la liaison incrémentielle d'une configuration de débogage de votre programme.
pavé
@pavanred êtes-vous sûr que le compilateur C # effectue également une liaison incrémentielle? Je n'en ai entendu parler que dans le monde C ++. Dans un projet C ++, vous activez / désactivez la liaison incrémentielle à partir des propriétés du projet. Existe-t-il également une option dans le projet C #?
RBT

Réponses:

236

Un fichier PDB contient des informations permettant au débogueur de fonctionner. De toute façon, il y a moins d'informations dans une version Release que dans une version Debug. Mais si vous ne voulez pas qu'il soit généré du tout, allez dans les propriétés de construction de votre projet, sélectionnez la configuration Release, cliquez sur "Advanced ..." et sous "Debug Info" choisissez "None".

Jon Skeet
la source
2
@Jon Cela aide-t-il à fournir des informations supplémentaires à l'utilisateur si l'application se bloque en cours d'utilisation? (c'est-à-dire, est-ce que cela aide avec la fenêtre JIT, plutôt que "Ce programme doit se terminer, envoyer un rapport d'erreur Windows")
Jared Harley
19
Gardez à l'esprit que vous devez probablement les conserver dans vos versions de débogage, car cela permet de tracer les exceptions jusqu'à une ligne spécifique de votre code. Sans les symboles dans le fichier pdb, vous aurez du mal à identifier des problèmes spécifiques afin de les résoudre. Vous n'avez pas nécessairement besoin de les exclure des versions de version, car parfois les informations supplémentaires dans un gros rapport peuvent être très utiles.
Darbio
4
@Jared: Oui, il inclut une trace de pile de l'exception, qui identifiera une fonction et une ligne de code spécifiques.
Darbio
1
@Jared: Qu'entendez-vous par "la fenêtre JIT"? Il est peu probable qu'il fournisse beaucoup plus d'informations à l'utilisateur, mais cela peut vous permettre d'attacher un débogueur à une version de version si vous en avez besoin. Cependant, vous ne l'incluez généralement pas pour les applications d'utilisateur final. Bien sûr, ce n'est pas parce qu'il est copié dans le dossier Release que vous devez l'envoyer dans le programme d'installation ...
Jon Skeet
3
@Ata: PDB, pas PDF. Veuillez séparer les deux dans votre esprit - ce sont des formats de fichiers complètement différents, à des fins différentes. L'inclusion d'un PDB ne poserait pas de problème particulier; cela peut rendre le travail d'un pirate un peu plus facile, mais est-ce une préoccupation particulière pour vous? En général, .NET peut être décompilé relativement facilement dans la plupart des cas - si cela vous inquiète, tout simplement ne pas envoyer la PDB n'est pas une bonne solution.
Jon Skeet
130

Je m'étais initialement posé la question " Ai-je besoin d'un fichier PDB déployé sur la machine de mon client? ", Et après avoir lu ce post, j'ai décidé d'exclure le fichier.

Tout a bien fonctionné, jusqu'à aujourd'hui, lorsque j'essayais de comprendre pourquoi une boîte de message contenant un Exception.StackTracemanquait le fichier et les informations de numéro de ligne - nécessaires pour dépanner l'exception. J'ai relu ce post et trouvé le nugget clé d'informations: que bien que le PDB ne soit pas nécessaire pour que l'application s'exécute, il est nécessaire que les numéros de fichier et de ligne soient présents dans la StackTracechaîne. J'ai inclus le fichier PDB dans le dossier exécutable et maintenant tout va bien.

BCA
la source
2
Il s'agit d'une partie très importante à garder à l'esprit que l' accepted answerici ne mentionne pas.
Monku
85

PDB est l'abréviation de P rogram D ata B ase. Comme son nom l'indique, il s'agit d'un référentiel (stockage persistant tel que des bases de données) pour conserver les informations nécessaires à l'exécution de votre programme en mode débogage. Il contient de nombreuses informations pertinentes importantes requises pendant le débogage de votre code (dans Visual Studio), par exemple à quels points vous avez inséré des points d'arrêt où vous vous attendez à ce que le débogueur se casse dans Visual Studio.

C'est la raison pour laquelle plusieurs fois Visual Studio ne parvient pas à atteindre les points d'arrêt si vous supprimez les *.pdbfichiers de vos dossiers de débogage. Le débogueur Visual Studio peut également vous indiquer le numéro de ligne précis du fichier de code auquel une exception s'est produite dans une trace de pile à l'aide de*.pdb fichiers. Les fichiers pdb sont donc vraiment une aubaine pour les développeurs lors du débogage d'un programme.

En règle générale, il n'est pas recommandé d'exclure la génération de *.pdbfichiers. Du point de vue de la version de production, vous devez créer les fichiers pdb, mais ne les envoyez pas au site client dans le programme d'installation du produit. Conservez tous les fichiers PDB générés sur un serveur de symboles d'où ils pourront être utilisés / référencés à l'avenir si nécessaire. Spécialement pour les cas où vous déboguez des problèmes tels que le plantage du processus Lorsque vous commencez à analyser les fichiers de vidage sur incident et si vos *.pdbfichiers d' origine créés pendant le processus de génération ne sont pas conservés, Visual Studio ne pourra pas distinguer la ligne de code exacte qui provoque le crash .

Si vous souhaitez toujours désactiver la génération de *.pdbfichiers pour toute version, accédez aux propriétés du projet -> onglet Génération -> cliquez sur le Advancedbouton -> choisissez nonedans la liste déroulante "Informations de débogage" -> appuyez sur OKcomme indiqué dans l'instantané ci-dessous .

Aucun paramètre d'informations de débogage pour un projet C #

Remarque : Ce paramètre devra être effectué séparément pour les configurations de build "Debug" et "Release".

RBT
la source
13

Un fichier PDB contient des informations utilisées par le débogueur. Il n'est pas nécessaire d'exécuter votre application et il n'est pas nécessaire de l'inclure dans votre version publiée.

Vous pouvez désactiver la création de fichiers pdb dans Visual Studio. Si vous construisez à partir de la ligne de commande ou d'un script, omettez le /Debugcommutateur.

Mark Byers
la source
2
Le mode Release construit toujours des PDB par défaut, je crois. Vous pouvez cependant modifier les propriétés du projet pour le désactiver.
Jon Skeet
Ouaip; il est toujours livré avec une version avec un projet par défaut.
Andrew Barber du
Je viens de vérifier et j'obtiens également un par défaut si vous utilisez Visual Studio.
Mark Byers
4

Le fichier de base de données de débogage de programme (pdb) est un format de fichier de Microsoft pour le stockage des informations de débogage.

Lorsque vous générez un projet à l'aide de Visual Studio ou d'une invite de commandes, le compilateur crée ces fichiers de symboles.

Vérifiez Microsoft Docs

Nipuna
la source