«Невозможно оценить выражение, потому что код текущего метода оптимизирован» в Visual Studio 2010 - PullRequest
141 голосов
/ 10 августа 2010

Я использую Visual Studio 2010 в режиме отладки, и у меня снят флажок "оптимизировать код".Я не могу быстро наблюдать (или зависать) любую переменную в отладчике.Я получаю эту ошибку «Невозможно оценить выражение, потому что код текущего метода оптимизирован».

Даже такая строка: int i = -3, при быстром просмотре i я получаю «Невозможно получить значениеlocal или аргумент 'i', так как он недоступен в указателе этой инструкции, возможно, потому что он был оптимизирован. "

Эта ссылка , на которую ссылается аналогичный вопрос, кажется, не применима.

Есть ли пропущенная настройка?

Ответы [ 20 ]

158 голосов
/ 10 августа 2010

Пока проект находился в режиме отладки, решения не было. Когда я это изменил, это сработало.

46 голосов
/ 03 мая 2011

У меня была эта проблема, когда я использовал VS 2010. Моя конфигурация решения (Отладка) выбрана. Я решил эту проблему, сняв флажок со свойством Оптимизировать код в свойствах проекта. Проект (щелкните правой кнопкой мыши) => Свойства => Построить (вкладка) => снять флажок Оптимизировать код

28 голосов
/ 10 августа 2010

Похоже, что вы отлаживаете оптимизированную / выпускную сборку, несмотря на то, что оптимизированный флажок не установлен.Вы можете попробовать следующее:

  • Выполнить полную перестройку файла решения (щелкните правой кнопкой мыши по решению и выберите Перестроить все)
  • Во время отладки откройте окно модулей (Отладка -> Windows -> Модули) и найдите свою сборку в списке загруженных модулей.Убедитесь, что путь, указанный для загруженной сборки, соответствует ожидаемому, и что измененная временная метка файла указывает на то, что сборка фактически была восстановлена.
  • В окне модулей также должно быть указано, действительно лизагруженный модуль оптимизирован или нет - убедитесь, что в окне модулей указано, что он не оптимизирован.

Если вы не видите пункт меню «Модули» в меню «Отладка -> Windows», возможно, вам потребуетсячтобы добавить его в меню «Настройка ...».

14 голосов
/ 17 февраля 2014

В VS2013 перейдите: Инструменты -> Параметры -> Отладка -> Общие и включите «Использовать режим управляемой совместимости». Это отключает поведение оценки новой функции.

9 голосов
/ 14 марта 2015

Попробуйте запустить в режиме отладки. Если вы работаете в режиме выпуска, вы получите это сообщение.

6 голосов
/ 10 июня 2015

Моя ситуация не была охвачена ни одним из вышеуказанных ответов. Я обнаружил следующее: Статья MSDN о многопоточности, которая объясняет, что при застревании в некоторых примитивных нативных операциях многопоточности отладчик не может получить доступ к данным. Например, когда поток находится в Task.Wait (), он появляется.

6 голосов
/ 02 сентября 2015

У меня была такая же проблема. Но в моем случае атрибут Debuggable был жестко запрограммирован в файле AssemblyInfo.cs моего проекта и поэтому не был перезаписан компиляцией. Сработало после удаления строки, указывающей атрибут Debuggable.

5 голосов
/ 14 апреля 2011

У меня была такая же проблема в VS2008.В моем случае это было решено с помощью решения перестроить.

4 голосов
/ 21 июля 2016

Когда вы видите сообщение « Невозможно оценить выражение, потому что код текущего метода оптимизирован. » после выполнения оператора Debugger.Break(), тогда, пожалуйста, убедитесь, что вы нажимаете F10, чтобы перейти к следующему оператору.

После перехода к следующему оператору и при условии, что вы запускаете сборку Debug, это сообщение должно исчезнуть.

4 голосов
/ 10 августа 2010

Помимо упомянутого @Kragen, если вы отлаживаете веб-проект

закройте Visual Studio и попробуйте удалить временные файлы в C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...