J'utilise Visual Studio 2010 en mode débogage et je n'ai pas coché "Optimiser le code". Je ne peux pas regarder rapidement (ou survoler) une variable dans le débogueur. J'obtiens cette erreur "Impossible d'évaluer l'expression car le code de la méthode actuelle est optimisé".
Même une ligne comme: int i = -3, faisant une rapide surveillance sur i, j'obtiens "Impossible d'obtenir la valeur du local ou de l'argument 'i' car il n'est pas disponible à ce pointeur d'instruction, probablement parce qu'il a été optimisé."
Ce lien référencé dans une question similaire ne semble pas s'appliquer.
Y a-t-il un paramètre qui me manque?
c#
visual-studio
visual-studio-2010
Tony_Henrich
la source
la source
Réponses:
Alors que le projet était en mode débogage, la solution ne l'était pas. Quand je l'ai changé, cela a fonctionné.
la source
J'ai eu ce problème lorsque j'utilisais VS 2010. Ma configuration de solution a sélectionné (Débogage). J'ai résolu ce problème en décochant la propriété Optimiser le code sous les propriétés du projet. Projet (clic droit) => Propriétés => Construire (onglet) => décocher Optimiser le code
la source
Il semble que vous déboguez une version optimisée / de version, malgré la case optimisée non cochée. Les choses que vous pouvez essayer sont:
Si vous ne voyez pas l'élément de menu Modules dans le menu Déboguer -> Windows, vous devrez peut-être l'ajouter dans le menu "Personnaliser ...".
la source
Project.Web
a Optimisation décoché mais il apparaît toujours comme Optimisé quand je regarde son assemblage dansDebug > Modules
:(Dans VS2013, allez dans: Outils -> Options -> Débogage -> Général et activez «Utiliser le mode de compatibilité gérée». Cela désactive le nouveau comportement d'évaluation de la fonction.
la source
Essayez d'exécuter en mode débogage.Si vous exécutez en mode version, vous obtiendrez ce message.
la source
Ma situation n'a été couverte par aucune des réponses ci-dessus. J'ai trouvé ce qui suit: Article MSDN sur le threading qui explique que lorsqu'il est bloqué dans certaines opérations de threading natives primitives, le débogueur ne peut pas accéder aux données. Par exemple, lorsqu'un thread est assis sur Task.Wait (), cela se produit.
la source
J'ai eu le même problème. Mais dans mon cas, l'
Debuggable
attribut était codé en dur dans leAssemblyInfo.cs
fichier de mon projet et donc pas (sur-) écrit par compilation. Cela a fonctionné après avoir supprimé la ligne spécifiant l'Debuggable
attribut.la source
Pour moi, cela se passait dans VS2017 et VS2019. Cela a cessé de se produire après avoir sélectionné l'option "Optimisation JIT supprimée lors du chargement du module".
la source
J'ai eu le même problème dans VS2008. Dans mon cas, cela a été résolu via la reconstruction de la solution.
la source
En dehors de @Kragen mentionné, si vous déboguez un projet Web
fermez le studio visuel et essayez de supprimer les fichiers temporaires dans C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files
la source
Une autre chose que vous pouvez faire est de créer un fichier avec le même nom que la dll qui est optimisée mais avec l'extension ini et y ajouter ce qui suit:
[Contrôle de débogage .NET Framework]
GenerateTrackingInfo = 1
AllowOptimize = 0
Cela indiquera au JIT de ne pas optimiser vos variables.
Notez que vous avez toujours besoin du pdb, vous vous retrouverez donc avec quelque chose comme ceci: yourDll.dll yourDll.pdb yourDll.ini
Cela fonctionne particulièrement bien dans les scénarios où vous n'avez pas accès pour régénérer les dll avec l'option de débogage.
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
la source
Lorsque vous voyez le message « Impossible d'évaluer l'expression car le code de la méthode actuelle est optimisé » après l'émission d'une
Debugger.Break()
instruction, assurez-vous d'appuyer sur F10 pour passer à l'instruction suivante.Une fois passé à l'instruction suivante, et en supposant que vous exécutez une génération de débogage, ce message devrait disparaître.
la source
En ce qui concerne le problème avec la propriété "Optimiser le code" qui n'est pas encore vérifiée, le code est toujours compilé comme optimisé: ce qui m'a finalement aidé après avoir tout essayé était de cocher la case "Activer le débogage de code non managé" sur la même page de paramètres (Propriétés du projet - Débogage). Cela ne concerne pas directement l'optimisation du code, mais avec cette option activée, VS n'optimise plus ma bibliothèque et je peux déboguer.
la source
J'ai eu le même problème lors du débogage d'une bibliothèque de classes à partir d'une application Web testée. Je faisais référence à la version publiée dans le banc de test et qui a été définie pour être optimisée dans les propriétés de la bibliothèque de classes.
Décocher la case à cocher Optimiser le code pour la version publiée dans les propriétés de la bibliothèque de classes, juste au moment où je l'écris, a résolu le problème.
la source
Je me rends compte que c'est une réponse plus tardive, mais j'ai trouvé une autre référence à un moyen de résoudre ce problème qui pourrait aider d'autres à l'avenir. Cette page Web décrit la définition d'une variable d'environnement (COMPLUS_ZapDisable = 1) qui empêche l'optimisation, du moins pour moi! (N'oubliez pas la deuxième partie de la désactivation du processus d'hébergement de Visual Studio.) Dans mon cas, cela aurait pu être encore plus pertinent car je déboguais une DLL externe via un serveur de symboles, mais je ne suis pas sûr.
la source
J'ai eu ce problème avec un projet F # qui avait été ici et là entre Visual Studio et MonoDevelop, peut-être originaire de ce dernier (j'oublie). Dans VS, la case d'optimisation n'était pas cochée, mais l'optimisation semblait certainement se produire en ce qui concerne le débogueur.
Après avoir comparé le XML du fichier de projet à celui d'un fichier sain, le problème était évident: le projet sain avait une
<optimize>false</optimize>
ligne explicite , alors que le mauvais la manquait complètement. VS déduisait évidemment de son absence que l'optimisation était désactivée, tandis que le compilateur faisait le contraire.La solution consistait à ajouter cette propriété au fichier projet et à recharger.
la source
J'ai commencé à recevoir ce message lorsque j'ai migré vers Visual Studio 2017. Aucune des idées de cette page que j'ai essayées n'a fonctionné pour moi. Sur un autre message, j'ai trouvé cette suggestion et cela a fonctionné - supprimer:
... à partir de votre fichier AssemblyInfo.
la source
J'ai eu le même problème dans VS 2010. Nettoyé et reconstruit la solution et cela a fonctionné.
la source
Le commentaire de vickramds ci-dessus, faisant référence à http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html , l'a fait pour moi. J'ai tout vérifié - supprimé toutes les dll, les fichiers pdb des dossiers bin locaux, nettoyer, reconstruire, effacé tous les dossiers des fichiers ASP.NET temporaires, s'assurer que les indicateurs TRACE / DEBUG étaient définis, vérifier les chemins DLL, etc.
Pour le déposer afin qu'il ne soit pas perdu, pour le (s) projet (s) concerné (s):
Propriétés du projet -> Build -> Advanced -> Debug Info: Full.
Vous voulez vérifier que vous avez sélectionné la configuration de débogage avant de faire cela, à moins bien sûr que vous n'en ayez l'intention.
la source
Si vous essayez de déboguer un projet ASP.NET, assurez-vous que la liste déroulante Propriétés> Web> Serveurs du projet est définie sur «IIS Express» (en plus de vérifier tout le reste ici).
la source
J'avais des dll d'extension mixtes c ++ / cli mfc, qui étaient optimisées même si la configuration de débogage (vue depuis la fenêtre Modules VS 2017). Comme la réponse précédente l'a suggéré, j'ai changé "Dans VS2013, allez dans: Outils -> Options -> Débogage -> Général et activez 'Utiliser le mode de compatibilité gérée'. Cela désactive le nouveau comportement d'évaluation des fonctions." Ces paramètres se trouvent également dans VS 2017.
Mais ce n'était pas suffisant, j'ai donc également copié le paramètre UseDebugLibraries du fichier de projet d'une autre application MFC vers le fichier de projet d'extension dll.
Puis reconstruisez et cela a résolu le problème.
la source
Dans Visual Studio 2012, l'activation de l' option « Géré » dans Outils> Débogage> Juste à temps a fonctionné pour moi.
la source