Dans Visual Studio 2010 pour un projet C #, si vous accédez à Propriétés du projet> Générer> Avancé> Informations de débogage, vous avez trois options: aucune, complète ou pdb uniquement. Sur la base de la réponse à cette question , je crois comprendre certaines des différences entre full et pdb-only. Cependant, lequel est le plus approprié pour une version de version? Si j'utilise «full», y aura-t-il des ramifications sur les performances? Si j'utilise "pdb uniquement", est-ce qu'il sera plus difficile de déboguer les problèmes de production?
Quelle est la différence entre "full" et "pdbonly"? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/debug-compiler-option
c#
visual-studio
debugging
build
debug-symbols
RationalGeek
la source
la source
Réponses:
Je construirais avec
pdb-only
. Vous ne pourrez pas attacher un débogueur au produit publié, mais si vous obtenez un vidage sur incident, vous pouvez utiliser Visual Studio ou WinDBG pour examiner les traces de pile et les vidages de mémoire au moment de l'incident.Si vous choisissez
full
plutôt quepdb-only
, vous obtiendrez les mêmes avantages, sauf que l'exécutable peut être attaché directement à un débogueur. Vous devrez déterminer si cela est raisonnable compte tenu de votre produit et de vos clients.Assurez-vous de sauvegarder les fichiers PDB quelque part afin de pouvoir les référencer lorsqu'un rapport de plantage arrive. Si vous pouvez configurer un serveur de symboles pour stocker ces symboles de débogage, tant mieux.
Si vous choisissez de construire avec
none
, vous n'aurez aucun recours en cas de plantage sur le terrain. Vous ne pourrez effectuer aucune sorte d'examen après coup de l'accident, ce qui pourrait sérieusement entraver votre capacité à localiser le problème.Une note sur les performances:
Les deux Robbins John et Eric Lippert ont écrit les messages de blog sur le
/debug
drapeau, et ils indiquent tous deux que ce paramètre a zéro impact sur les performances . Il existe un/optimize
indicateur distinct qui dicte si le compilateur doit effectuer des optimisations.la source
If you use /debug:full, be aware that there is some impact on the speed and size of JIT optimized code and a small impact on code quality with /debug:full. We recommend /debug:pdbonly or no PDB for generating release code.
AVERTISSEMENT La documentation MSDN pour le commutateur / debug (dans Visual Studio, il s'agit des informations de débogage) semble être obsolète! C'est ce qu'il a qui est incorrect
Alors, qu'est-ce qui est vrai maintenant?
S'ils sont exactement les mêmes, pourquoi avons-nous ces options? John Robbins (le dieu du débogage de Windows) a découvert qu'ils étaient là pour des raisons historiques.
puis il continue pour le prouver.
Désormais, l'optimisation fait partie d'un commutateur séparé
/optimize
(dans Visual Studio, cela s'appelleOptimize code
).En bref, quel que soit le paramétrage de DebugInfo pdb-only ou full, nous aurons les mêmes résultats. La recommandation est d'éviter None car cela vous priverait de pouvoir analyser les vidages sur incident du produit publié ou de l'attachement du débogueur.
la source
Release
le type de débogage de la configuration défini par défaut surpdbonly
.Vous ne voudrez que PDB, mais vous ne voudrez pas donner les fichiers PDB aux utilisateurs. Les avoir pour vous-même, en plus de vos binaires, vous donne la possibilité de charger des vidages sur incident dans un débogueur comme WinDbg et de voir où votre programme a réellement échoué. Cela peut être plutôt utile lorsque votre code plante sur une machine à laquelle vous n'avez pas accès.
Le débogage complet ajoute l'attribut [Debuggable] à votre code. Cela a un impact énorme sur la vitesse. Par exemple, certaines optimisations de boucle peuvent être désactivées pour faciliter le pas à pas. De plus, cela a un petit effet sur le processus JIT, car il active le suivi.
la source
Je suis en train d'écrire un gestionnaire d'exceptions non géré et la trace de la pile inclut le numéro de ligne lorsque pdb-only est utilisé, sinon j'obtiens simplement le nom du sous / fonction lorsque je choisis Aucun.
Si je ne distribue pas le .pdb, je n'obtiens pas le numéro de ligne dans la trace de la pile, même avec la version pdb uniquement.
Donc, je distribue (XCOPY déploie sur un LAN) le pdb avec l'exe de mon application VB.
la source