web-dev-qa-db-fra.com

Impossible d'obtenir la valeur de local ou d'argument car elle n'est pas disponible au niveau de ce pointeur d'instruction, peut-être parce qu'elle a été optimisée

Visual Studio 2010 supprime (il n'y a pas d'autre mot) des données dans l'un des arguments de fonctions dans un bloc non sécurisé . Qu'est-ce qui pourrait provoquer cette erreur? Le message suivant s'affiche par le débogueur. 

Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
149
curiousity

Cliquez sur Propriétés du projet et sous Génération. Assurez-vous que la case à cocher "Optimiser le code" est décochée. 

Définissez également le menu déroulant "Informations de débogage" sur "Complet" dans les Options avancées (onglet Sous Construction).

243
Karthik

AussiIn VS 2015 Community Edition

allez dans Debug-> Options ou Outils-> Options

et vérifiez Débogage-> Général-> Supprimer l'optimisation JIT lors du chargement du module (Géré uniquement) 

86
xyq.384.b

Si vous compilez avec les optimisations activées, de nombreuses variables seront supprimées. par exemple:

SomeType value = GetValue();
DoSomething(value);

ici, la variable locale value serait généralement supprimée, en conservant la valeur sur la pile - un peu comme si vous aviez écrit:

DoSomething(GetValue());

De plus, si une valeur de retour n'est pas utilisée du tout, elle sera supprimée via "pop" (plutôt que stockée dans un local via "stloc", et encore; le local n'existera pas).

De ce fait, dans une telle construction, le débogueur ne peut pas obtenir la valeur actuelle de value car il n'existe pas - il n'existe que pour le bref instant entre GetValue() et DoSomething(...).

Alors; si vous voulez déboguer ... n'utilisez pas de version release! ou du moins, désactivez les optimisations pendant le débogage.

57
Marc Gravell

http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html

Cela a fonctionné pour moi dans Visual Studio 2013.

Tout ce que tu dois faire est..

  1. Cliquez avec le bouton droit de la souris sur le projet que vous ne pouvez pas déboguer.
  2. Aller aux propriétés du projet.
  3. Cliquez sur le menu de construction.
  4. Cliquez sur le bouton avancé.
  5. Définissez la valeur de la liste déroulante des informations de débogage sur pleine.
  6. Reconstruisez votre projet. 
22

Je viens de rencontrer cela et je courais sous Release build configuration au lieu de Debug build configuration. Une fois que je suis revenu à Debug, ma variable a de nouveau été affichée dans la montre.

16

Face au même problème, je devais simplement nettoyer ma solution avant de la reconstruire. Cela a pris soin de moi pour moi.

7
CJe

En ce qui concerne le problème de non-vérification de la propriété "Optimiser le code", le code compilant toujours 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 géré" 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.

6
Miloš

J'ai fait face au même problème et la solution pour moi est de changer Solution Configuration de Release à Debug. J'espère que ça aide 

5
Hoang Tran

J'ai constaté que j'avais le même problème lorsque j'exécutais un projet et que je procédais au débogage en le rattachant à un processus IIS. J'exécutais également en mode débogage avec les optimisations désactivées. Alors que je pensais que le code était bien compilé, lorsque je me suis détaché et que j'ai essayé de compiler, une des références n'a pas été trouvée. Cela était dû à un autre développeur ici qui a apporté des modifications et changé l'emplacement de la référence. La référence n'apparaissant pas avec le symbole d'alerte, j'ai donc pensé que tout allait bien jusqu'à ce que je fasse la compilation. Une fois la référence corrigée et le fonctionnement en cours, cela a fonctionné.

3
Derreck Dean

Dans Visual Studio 2017 Goto Debug-> Option puis cochez Debugging-> general -> Et cochez cette option

 relevant Visual Studio 2017 Options

2
Zahid Hasan

Dans mon cas, je travaillais sur un projet API Web et bien que le projet soit correctement configuré pour le débogage complet, je voyais toujours cette erreur chaque fois que je me connectais au processus IIS que je tentais de déboguer. Ensuite, j'ai réalisé que le profil de publication était configuré pour utiliser la configuration de la version. Il est donc utile de vérifier votre profil de publication si vous utilisez la fonctionnalité "Publier" de votre projet API Web .NET.

2
user8683595

En guise de réponse supplémentaire pour ceux qui rencontrent ce problème lors du débogage d'une application Web de sites Web Azure:

Lors du déploiement à partir de GitHub, par exemple, le code est compilé dans le serveur Azure optimisé par défaut.

Je dis au serveur de compiler de manière débogable en mettant SCM_BUILD_ARGS à /p:Configuration=Debug

mais il y a plus d'options. Voir ceci: http://Azure.Microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-Azure-web-sites-part-3-multi-instance- environment-and-git/

1
iberodev

J'ai eu le même problème. J'ai essayé tout ce qui précède et j'ai trouvé que je devais aussi tout supprimer à l'intérieur de {PROJECT_ROOT}\bin\Release\netcoreapp2.2 et de {PROJECT_ROOT}\obj\Release\netcoreapp2.2 pour mon projet. Il est définitivement lié à la publication car bien que j'utilise les outils de déploiement/bitbucket sur mon application Web Azure, j'ai quand même essayé Générer >> Publier >> Publier vers Azure, car je souhaitais inspecter les fichiers effectivement déployés.

0
ozzy432836

Dans Visual Studio 2012:

Allez dans les propriétés du projet -> Debug -> Décochez "Activer le processus d'hébergement Visual Studio"

0
Milana

Dans Visual Studio 2017 ou 2015:

Allez dans la solution cliquez avec le bouton droit de la souris sur la solution, puis sélectionnez Propriétés-> sélectionnez toute la configuration-> débogage, puis cliquez sur OK . Après cette reconstruction, cette solution a fonctionné pour moi. 

0
Kalyan

Vérifiez si vous avez un attribut Debuggable dans votre fichier AssemblyInfo. Si tel est le cas, supprimez-le et reconstruisez votre solution pour voir si les variables locales sont disponibles. 

Mon attribut debuggable a été défini sur: DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints qui, selon cet article MSDN , indique au compilateur JIT d'utiliser les optimisations. J'ai supprimé cette ligne de mon fichier AssemblyInfo.cs et les variables locales étaient disponibles. 

0
Nick