"Невозможно оценить выражение, потому что код текущего метода оптимизирован" в Visual Studio 2010

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

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

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

Есть ли параметр, который мне не хватает?

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Если вы не видите пункт меню "Модули" в меню "Отладка → Windows", вам может потребоваться добавить его в меню "Настроить...".

Ответ 4

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

Ответ 5

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

Ответ 6

У меня такая же проблема. Но в моем случае атрибут Debuggable был жестко закодирован в файле AssemblyInfo.cs моего проекта, а потому (over-), написанном компиляцией. Он работал после удаления строки с указанием атрибута Debuggable.

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

[. Контроль отладки .NET Framework]
GenerateTrackingInfo = 1
AllowOptimize = 0

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

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

Это хорошо работает в сценариях, когда у вас нет доступа к повторной генерации DLL с опцией debug.

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

Ответ 11

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

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

Ответ 12

Относительно проблемы с параметром "Оптимизировать код", который был UNCHECKED, но код все еще компилируется как оптимизированный: что, наконец, помогло мне после попытки проверить флажок "Включить неуправляемый отладку кода" на той же странице настроек (Свойства проекта - Отладка), Он напрямую не связан с оптимизацией кода, но с этим включен, VS больше не оптимизирует мою библиотеку, и я могу отлаживать.

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

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

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

Ответ 16

Для меня это происходило в VS2017 и VS2019. Это прекратилось после того, как я выбрал опцию "Подавленная оптимизация JIT при загрузке модуля".

enter image description here

Ответ 17

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

Ответ 18

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

Отложить его, чтобы он не потерялся, для затронутого проекта (ов):

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

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

Ответ 19

Если вы пытаетесь отладить проект ASP.NET, убедитесь, что раскрывающийся список Properties > Web > Servers установлен в "IIS Express" (в дополнение к проверке всего остального здесь).

Ответ 20

Убедитесь, что вы находитесь в режиме отладки.

Из обозревателя решений:

1 - Щелкните правой кнопкой мыши по вашему проекту
2 - Свойства
3 - Нажмите на Build
4 - Снимите флажок "Оптимизировать код".

Ответ 21

Я начал получать это сообщение, когда перешел на Visual Studio 2017. Ни одна из идей на этой странице, которую я пробовала, не работала для меня. На другом посту я нашел это предложение, и он работал - удалил:

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

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

Ответ 22

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

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

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

Затем перестройте и устраните проблему.