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

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

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

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

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

Ответы [ 20 ]

4 голосов
/ 21 августа 2014

Еще одна вещь, которую вы можете сделать, это создать файл с таким же именем, как у dll, который оптимизирован, но с расширением ini, и добавить к нему следующее:

[Управление отладкой .NET Framework]
GenerateTrackingInfo = 1
AllowOptimize = 0

Это скажет JIT не оптимизировать ваши переменные.

Обратите внимание, что вам все еще нужен pdb, так что в итоге вы получите что-то вроде этого: yourDll.dll yourDll.pdb yourDll.ini

Это особенно хорошо работает в сценариях, когда у вас нет доступа для повторного создания библиотек с параметром отладки.

http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx

3 голосов
/ 24 января 2016

У меня была эта проблема с проектом F #, который был здесь и там между Visual Studio и MonoDevelop, возможно, возник в последнем (я забыл).В VS окно оптимизации не было проверено, но оптимизация, безусловно, происходила в том, что касается отладчика.

После сравнения XML файла проекта со здоровым, проблема была очевидна: у здорового проекта была явная строка <optimize>false</optimize>, тогда как у плохого полностью ее не было.VS явно выводил из своего отсутствия, что оптимизация была отключена, в то время как компилятор делал обратное.

Решением было добавить это свойство в файл проекта и перезагрузить.

3 голосов
/ 02 мая 2013

Относительно проблемы, когда свойство «Оптимизировать код» НЕПРАВИЛЬНО, но код по-прежнему компилируется как оптимизированный: в конце концов, после всех попыток, мне помог флажок «Включить отладку неуправляемого кода» на той же странице настроек (Свойства проекта - Отладка),Это не имеет прямого отношения к оптимизации кода, но с этим включенным VS больше не оптимизирует мою библиотеку, и я могу отлаживать.

3 голосов
/ 25 сентября 2013

У меня была такая же проблема при отладке библиотеки классов из тестового веб-приложения.Я ссылался на версию выпуска в тестовом стенде, и она была настроена для оптимизации в свойствах библиотеки классов.

Снимите флажок оптимизации кода для версии выпуска в свойствах библиотеки классов, как раз во время написанияэто, решил вопрос.

3 голосов
/ 06 февраля 2015

Я понимаю, что это более поздний ответ, но я нашел другую ссылку на способ решения этой проблемы, который может помочь другим в будущем. Эта веб-страница описывает настройку переменной среды (COMPLUS_ZapDisable = 1), которая препятствует оптимизации, по крайней мере, для меня! (Не забудьте вторую часть отключения процесса размещения Visual Studio.) В моем случае это могло бы быть еще более актуальным, поскольку я отлаживал внешнюю DLL через сервер символов, но я не уверен.

0 голосов
/ 19 июня 2015

Если вы пытаетесь отладить проект ASP.NET, убедитесь, что в раскрывающемся списке «Свойства»> «Веб»> «Серверы» для проекта установлено значение «IIS Express» (в дополнение к проверке всего остального здесь).

0 голосов
/ 09 января 2014

У меня была такая же проблема в VS 2010. Очистил и пересобрал решение, и оно заработало.

0 голосов
/ 03 ноября 2017

Я начал получать это сообщение при переходе на Visual Studio 2017. Ни одна из идей на этой странице, которые я пробовал, не сработала для меня.В другом посте я нашел это предложение, и оно ДЕЙСТВИТЕЛЬНО сработало - удалите:

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

... из вашего файла AssemblyInfo.

0 голосов
/ 18 октября 2018

У меня были смешанные dll расширения c ++ / cli mfc, которые были оптимизированы даже при отладке конфигурации (видно из окна VS 2017 Modules).Как и предполагалось в предыдущем ответе, я изменил: «В VS2013 перейдите по адресу: Инструменты -> Параметры -> Отладка -> Общие и включите« Использовать режим управляемой совместимости ». Это отключает поведение оценки новой функции».Эти настройки можно найти и в VS 2017.

Но этого было недостаточно, поэтому я также скопировал параметр UseDebugLibraries из файла проекта другого приложения MFC в файл проекта расширения dll.

    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
      ...
      <UseDebugLibraries>true</UseDebugLibraries>

Затем пересоберитеи это решило проблему.

0 голосов
/ 22 августа 2014

Комментарий Викрамда выше, ссылаясь на http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html, сделал это для меня. Я проверил все - удалил все файлы dll, pdb из локальных папок bin, очистил, перестроил, очистил все папки временных файлов ASP.NET, проверил, установлены ли флаги TRACE / DEBUG, проверил пути к DLL и т. Д.

Чтобы положить его, чтобы он не был потерян, для затронутых проектов:

Свойства проекта -> Сборка -> Дополнительно -> Информация об отладке: Полная.

Вы хотите проверить, что у вас выбрана конфигурация отладки, прежде чем вы это сделаете, если, конечно, вы не намеревались иначе.

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