Duplicata possible Déboguer Visual Studio Release en .NET
Quelle est la différence entre Debug et Release dans Visual Studio ?
Duplicata possible Déboguer Visual Studio Release en .NET
Quelle est la différence entre Debug et Release dans Visual Studio ?
La chose la plus importante est qu'en mode Debug il n'y a pas d'optimisations, alors qu'en mode Release il y en a. C'est important car le compilateur est très avancé et peut effectuer des améliorations de bas niveau assez délicates de votre code. En conséquence, certaines lignes de votre code peuvent se retrouver sans aucune instruction, ou certaines peuvent être mélangées. Le débogage étape par étape serait impossible. De plus, les variables locales sont souvent optimisées de manière mystérieuse, de sorte que les Watches et QuickWatches ne fonctionnent souvent pas parce que la variable est "optimisée". Et il existe une multitude d'autres optimisations. Essayez un jour de déboguer du code .NET optimisé et vous verrez.
Une autre différence importante est que, pour cette raison, les paramètres par défaut de la version ne prennent pas la peine de générer des informations détaillées sur les symboles de débogage. Il s'agit du fichier .PDB que vous avez peut-être remarqué et qui permet au débogueur de déterminer quelles instructions d'assemblage correspondent à quelle ligne de code, etc.
"En conséquence, certaines lignes de votre code peuvent être laissées sans aucune instruction, ou certaines peuvent être mélangées". Oui, j'ai été victime de cela en utilisant les Stack frames pour obtenir le nom de la méthode/propriété courante - et beaucoup de propriétés ont été intégrées dans la version...
"La chose la plus importante est qu'en mode débogage il n'y a pas d'optimisations" - c'est discutable. la chose la plus importante est qu'il y a des informations de débogage qui vous permettent de déboguer. bien que cela puisse exister aussi en release.
Je ne sais pas quel est le mode par défaut (Debug/Release). Généralement, d'après mon expérience, tous les projets sont en mode debug et l'équipe d'installation s'occupe de cette version pour éviter les fichiers pdb et pour introduire des optimisations. Mais aujourd'hui, j'ai rencontré une situation où le mode a été changé en release et je ne suis pas en mesure de casser le code en utilisant le point de rupture. J'ai essayé pendant une heure de faire beaucoup de choses et finalement j'ai remarqué que c'est dû à un problème avec le mode de compilation actuel. @Vlix- Merci pour votre réponse.
"Debug" et "Release" ne sont en fait que deux étiquettes pour toute une série de paramètres qui peuvent affecter votre construction et votre débogage.
En mode "Debug", vous disposez généralement des éléments suivants :
En mode "Release", les optimisations sont activées (bien qu'il y ait plusieurs options disponibles) et la définition du préprocesseur _DEBUG n'est pas définie. En général, vous voudrez quand même générer les fichiers PDB, car il est très utile de pouvoir "déboguer" en mode "Release" lorsque les choses tournent plus vite.
"juste deux étiquettes" -- en fait, Visual Studio vous donne la possibilité de créer plus ! Cela peut être exceptionnellement utile pour tester un programme. Par exemple, j'ai récemment écrit un programme pour mon travail qui acceptait les noms de fichiers de la ligne de commande. J'ai testé l'analyse syntaxique de la ligne de commande, mais une fois que cela a été fait, je n'ai pas voulu m'embêter avec CMD et des listes de noms de fichiers tous les jours ; j'ai créé une configuration avec laquelle je pouvais utiliser la compilation conditionnelle pour fournir des valeurs de ligne de commande factices et tester la logique du programme, ce qui m'a permis d'accélérer considérablement le cycle d'itération du développement du programme.
1) Qu'en est-il des questions suivantes ? Il y a 3 configs dans un projet ASP.NET MVC : base (web), debug (web.debug), release (web.release). Supposons que nous définissions les chaînes de connexion debug et release par transformation dans la configuration correspondante (debug et release). Lors de la publication, nous pouvons publier en fonction de notre sélection dans le dialogue de publication. Mais, lors de l'exécution de l'application, bien que je sélectionne Debug, elle utilise la configuration release (parce que j'ai défini la configuration debug dans la configuration base et debug), est-ce normal ?
Si vous passez en revue les options de compilation du projet et les comparez, vous verrez quelles sont les différences.
En supposant que la question porte sur le code natif/C++ (la formulation n'est pas tout à fait claire) :
Fondamentalement, dans Debug, toutes les optimisations de génération de code sont désactivées. Certaines bibliothèques (par exemple STL ) permettent par défaut une vérification plus stricte des erreurs (par exemple, les itérateurs de débogage). Plus d'informations de débogage sont générées (par exemple pour "Edit and Continue"). Plus de choses sont générées dans le code pour attraper les erreurs (les valeurs des variables locales sont définies sur un modèle non initialisé, et le tas de débogage est utilisé).
Notez également que lorsque vous utilisez MFC par exemple, les projets de débogage se lient à des versions de DLL non redistribuables telles que MFC90D.DLL
tandis que les constructions de version se lient aux versions redistribuables comme MFC90.DLL
. Ceci est probablement similaire à d'autres cadres.
Par conséquent, vous ne serez probablement pas en mesure d'exécuter des applications de débogage et de construction sur des machines autres que des machines de développement.
Très vrai. J'ai eu des problèmes avec ça une fois chez un client. Fonctionne sur Ma Machine (TM).
Vous pouvez les distribuer (je ne sais pas si vous êtes autorisé à le faire). Ils doivent être dans un sous-dossier de votre application portant le même nom.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.