Dois-je comstackr les versions avec les informations de débogage en tant que «complet» ou «pdb uniquement»?

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 disposez de 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, qui est le plus approprié pour une version release? Si j’utilise “complet”, y aura-t-il des ramifications de performance? Si j’utilise “uniquement pdb”, sera-t-il 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/comstackr-options/debug-comstackr-option

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 stack et les vidages de mémoire au moment de l’incident.

Si vous optez pour la version full plutôt que pdb-only , vous obtiendrez les mêmes avantages, à ceci près que l’exécutable peut être associé directement à un débogueur. Vous devrez déterminer si cela est raisonnable compte tenu de votre produit et de vos clients.

Veillez à enregistrer les fichiers PDB quelque part afin de pouvoir les référencer lorsqu’un rapport de panne arrive. Si vous pouvez configurer un serveur de symboles pour stocker ces symboles de débogage, tant mieux.

Si vous choisissez de ne pas en construire, vous n’aurez aucun recours en cas de panne sur le terrain. Vous ne pourrez pas procéder à un examen après coup du crash, ce qui pourrait sérieusement entraver votre capacité à détecter le problème.

Une note sur la performance:

John Robbins et Eric Lippert ont tous deux écrit des articles sur l’indicateur /debug , et ils indiquent que ce paramètre n’a aucune incidence sur les performances . Il y a un indicateur séparé /optimize qui détermine si le compilateur doit effectuer des optimisations.

AVERTISSEMENT La documentation MSDN pour le commutateur / debug (dans Visual Studio, c’est Debug Info) semble être obsolète! C’est ce qu’il a qui est incorrect

Si vous utilisez / debug: full , sachez que la vitesse et la taille du code optimisé JIT ont un impact sur la qualité du code avec / debug: full . Nous recommandons / debug: pdbonly ou no PDB pour générer le code de version.

Une différence entre / debug: pdbonly et / debug: full est qu’avec / debug: full le compilateur émet un DebuggableAtsortingbute , qui est utilisé pour indiquer au compilateur JIT que des informations de débogage sont disponibles.

Alors, qu’est-ce qui est vrai maintenant?

  1. Pdb uniquement – Avant .NET 2.0, il était utile d’étudier les vidages sur incident du produit publié (machines client). Mais il n’a pas laissé attacher le débogueur. Ce n’est pas le cas de .NET 2.0. C’est exactement comme Full .
  2. Complet – Cela nous aide à enquêter sur les vidages sur incident, et nous permet également de connecter le débogueur à la version finale. Mais contrairement aux mentions MSDN, cela n’affecte pas les performances (depuis .NET 2.0). Il fait exactement la même chose que Pdb uniquement .

Si elles sont exactement identiques, pourquoi avons-nous ces options? John Robbins (dieu de débogage Windows) a découvert que ceux-ci sont là pour des raisons historiques.

Dans .NET 1.0, il y avait des différences, mais dans .NET 2.0, il n’y en a pas. Il semble que .NET 4.0 suivra le même schéma. Après une double vérification auprès de l’équipe de débogage CLR, il n’y a aucune différence.

Qu’est-ce qui contrôle si JITter fait une construction de débogage est le commutateur / optimiser. <…>

L’essentiel est que vous souhaitiez construire vos versions avec / Optimal + et n’importe lequel des commutateurs / debug afin de pouvoir déboguer avec le code source.

puis il continue à le prouver.

Maintenant, l’optimisation fait partie d’un commutateur /optimize séparé (dans Visual Studio, cela s’appelle Optimize code ).

En bref, quel que soit le paramètre DebugInfo défini uniquement dans pdb ou full, nous obtiendrons les mêmes résultats. Il est recommandé d’éviter None car cela vous empêcherait d’parsingr les vidages sur incident du produit ou du débogueur joint.

Vous voudrez uniquement PDB, mais vous ne voudrez pas donner les fichiers PDB aux utilisateurs. Si vous les avez vous-même, à côté de vos binarys, vous avez la possibilité de charger des vidages sur incident dans un débogueur tel que WinDbg et de voir où votre programme a réellement échoué. Cela peut être utile lorsque votre code plante sur une machine à laquelle vous n’avez pas access.

Le débogage complet ajoute l’atsortingbut [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 passage simple. En outre, cela a un petit effet sur le processus JIT, car il active le suivi.

Je suis en train d’écrire un gestionnaire d’exceptions non géré et la trace de stack inclut le numéro de ligne lorsque pdb uniquement est utilisé, sinon je reçois simplement le nom de la sous-fonction lorsque je choisis Aucun.

Si je ne dissortingbue pas le fichier .pdb, je ne reçois pas le numéro de ligne dans la trace de la stack, même avec la version pdb uniquement.

Donc, je dissortingbue (XCOPY déployé sur un réseau local) le pdb avec l’exe de mon application VB.