ATTENTION MSDN documentation pour l'interrupteur /debug (Dans Visual Studio, il s'agit de Debug Info) semble être obsolète! Voici ce qu'il contient, ce qui est incorrect
Si vous utilisez /debug:tout, sachez qu'il y a un impact sur la vitesse et la taille du code JIT optimisé et un petit impact sur la qualité du code avec /debug:tout. Nous recommandons /debug:pdbonly ou aucun PDB pour générer du code de version.
Une différence entre /debug:pdbonly et /debug:tout est qu'avec /debug:tout le compilateur émet un DebuggableAttribute
, qui est utilisé pour indiquer au compilateur JIT que des informations de débogage sont disponibles.
Alors, qu'est-ce qui est vrai maintenant?
- Pdb-only - Avant .NET 2.0, cela aidait à enquêter sur les rapports d'erreurs des produits publiés (machines clients). Mais cela n'autorisait pas la mise en place du débogueur. Ce n'est pas le cas à partir de .NET 2.0. C'est exactement la même chose que tout.
- Tout - Cela nous aide à enquêter sur les rapports d'erreurs, et nous permet également d'attacher le débogueur à la version publiée. Mais contrairement à ce que mentionne MSDN, cela n'a pas d'impact sur les performances (depuis .NET 2.0). Il fait exactement la même chose que Pdb-only.
S'ils sont exactement les mêmes, pourquoi avons-nous ces options? John Robbins (dieu du débogage windows) a découvert qu'elles sont là pour des raisons historiques.
À l'époque de .NET 1.0, il y avait des différences, mais avec .NET 2.0 il n'y en a plus. Il semble que .NET 4.0 suivra le même schéma. Après vérification avec l'équipe de débogage CLR, il n'y a aucune différence du tout.
Ce qui contrôle si le JITter effectue une construction de débogage, c'est l'interrupteur /optimize. <…>
En fin de compte, vous voulez construire vos versions de publication avec /optimize+ et l'un des interrupteurs /debug pour pouvoir déboguer avec le code source.
puis il continue à le prouver.
Maintenant, l'optimisation fait partie d'un interrupteur séparé /optimize
(dans Visual Studio, il est appelé Optimiser le code
).
En bref, peu importe le réglage DebugInfo de pdb-only ou tout, nous aurons les mêmes résultats. La recommandation est d'éviter Aucun car cela vous priverait de la possibilité d'analyser les rapports d'erreurs des produits publiés ou d'attacher le débogueur.
0 votes
Le pdb-only ou aucun, toujours pour les versions finales.
15 votes
@leppie Merci, mais je cherche une justification de cette position.
0 votes
Question liée : stackoverflow.com/questions/1270986/…
0 votes
C'est génial s'il n'y a pas d'impact sur les performances. Et en ce qui concerne l'impact sur la mémoire? Si je crée une instance de StackTrace et demande des informations sur les fichiers, elles doivent provenir des données de symboles pdb. Est-ce que tous les symboles sont chargés en mémoire au démarrage de l'application? Quelle est l'utilisation approximative de la mémoire pour cela? (par exemple, le surcoût en pourcentage par rapport à la taille du code.)