Я использую Visual Studio 2010 в режиме отладки, и у меня снят флажок «оптимизировать код». Я не могу быстро наблюдать (или зависать) любую переменную в отладчике. Я получаю эту ошибку «Невозможно оценить выражение, потому что код текущего метода оптимизирован».
Даже в такой строке, как: int i = -3, быстро просматривая i, я получаю «Не удается получить значение local или аргумента« i », так как оно недоступно по указателю этой инструкции, возможно, потому, что оно было оптимизировано».
Эта ссылка ссылается на подобный вопрос , кажется, не применяется.
Есть настройки, которые мне не хватает?
c#
visual-studio
visual-studio-2010
Tony_Henrich
источник
источник
Ответы:
Пока проект находился в режиме отладки, решения не было. Когда я изменил это, это сработало.
источник
У меня была эта проблема, когда я использовал VS 2010. Моя конфигурация решения (Отладка) выбрана. Я решил эту проблему, сняв флажок со свойством Оптимизировать код в свойствах проекта. Проект (щелкните правой кнопкой мыши) => Свойства => Построить (вкладка) => снять флажок Оптимизировать код
источник
Похоже, что вы отлаживаете оптимизированную / выпускную сборку, несмотря на то, что оптимизированный флажок не установлен. Вот что вы можете попробовать:
Если вы не видите пункт меню «Модули» в меню «Отладка -> Windows», вам может потребоваться добавить его в меню «Настройка ...».
источник
Project.Web
Оптимизация у меня снята, но она по-прежнему отображается как Оптимизированная, когда я смотрю на ее сборку вDebug > Modules
:(В VS2013 перейдите: Инструменты -> Параметры -> Отладка -> Общие и включите «Использовать режим управляемой совместимости». Это отключает поведение оценки новой функции.
источник
Попробуйте запустить в режиме отладки. Если вы работаете в режиме выпуска, вы получите это сообщение.
источник
Моя ситуация не была охвачена ни одним из вышеуказанных ответов. Я обнаружил следующее: статья MSDN о потоках, в которой объясняется, что при застревании в некоторых примитивных нативных операциях с потоками отладчик не может получить доступ к данным. Например, когда поток находится на Task.Wait (), это происходит.
источник
У меня такая же проблема. Но в моем случае
Debuggable
атрибут был жестко запрограммирован вAssemblyInfo.cs
файле моего проекта и поэтому не был перезаписан компиляцией. Сработало после удаления строки, указывающейDebuggable
атрибут.источник
Для меня это происходило в VS2017 и VS2019. Это перестало происходить после того, как я выбрал опцию «Подавленная оптимизация JIT при загрузке модуля».
источник
У меня была такая же проблема в VS2008. В моем случае это было решено с помощью решения перестроить.
источник
Помимо упомянутого @Kragen, если вы отлаживаете веб-проект
закройте Visual Studio и попробуйте удалить временные файлы в C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files
источник
Еще одна вещь, которую вы можете сделать, это создать файл с тем же именем, что и dll, который оптимизирован, но с расширением ini, и добавить к нему следующее:
[.NET Framework Отладка управления]
GenerateTrackingInfo = 1
AllowOptimize = 0
Это скажет JIT не оптимизировать ваши переменные.
Обратите внимание, что вам все еще нужен pdb, поэтому вы получите что-то вроде этого: yourDll.dll yourDll.pdb yourDll.ini
Это особенно хорошо работает в сценариях, когда у вас нет доступа к повторной генерации DLL с опцией отладки.
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
источник
Когда вы увидите сообщение « Невозможно оценить выражение, потому что код текущего метода оптимизирован. » После выполнения
Debugger.Break()
оператора, убедитесь, что вы нажимаете F10, чтобы перейти к следующему оператору.После перехода к следующему оператору и при условии, что вы запускаете сборку Debug, это сообщение должно исчезнуть.
источник
Относительно проблемы со свойством «Оптимизировать код» НЕПРАВИЛЬНО, но код все еще компилировался как оптимизированный: в конце концов, после всех попыток мне помог флажок «Включить отладку неуправляемого кода» на той же странице настроек (Свойства проекта - Отладка). Это не имеет прямого отношения к оптимизации кода, но с этим включенным VS больше не оптимизирует мою библиотеку, и я могу отлаживать.
источник
У меня была такая же проблема при отладке библиотеки классов из тестового веб-приложения. Я ссылался на версию релиза на тестовом стенде, и она была настроена для оптимизации в свойствах библиотеки классов.
Сняв флажок «Оптимизировать код» для версии выпуска в свойствах библиотеки классов, я решил написать эту проблему.
источник
Я понимаю, что это более поздний ответ, но я нашел другую ссылку на способ решения этой проблемы, который может помочь другим в будущем. На этой веб-странице описывается установка переменной среды (COMPLUS_ZapDisable = 1), которая препятствует оптимизации, по крайней мере, для меня! (Не забудьте про вторую часть отключения процесса размещения Visual Studio.) В моем случае это могло бы быть даже более актуально, потому что я отлаживал внешнюю DLL через сервер символов, но я не уверен.
источник
У меня была эта проблема с проектом F #, который был здесь и там между Visual Studio и MonoDevelop, возможно, возник в последнем (я забыл). В VS блок оптимизации не был отмечен, но оптимизация, безусловно, происходила в том, что касается отладчика.
После сравнения XML файла проекта со здоровым, проблема была очевидна: у здорового проекта был явный
<optimize>false</optimize>
строка, а у плохого ее полностью не было. VS явно выводил из своего отсутствия, что оптимизация была отключена, в то время как компилятор делал обратное.Решением было добавить это свойство в файл проекта и перезагрузить.
источник
Я начал получать это сообщение, когда перешел на Visual Studio 2017. Ни одна из идей на этой странице, которые я пробовал, не сработала для меня. В другом посте я нашел это предложение, и оно работало - удалить:
... из вашего файла AssemblyInfo.
источник
У меня была такая же проблема в VS 2010. Очистил и пересобрал решение, и оно заработало.
источник
Комментарий vickramds выше со ссылкой на http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html , сделал это для меня. Я проверил все - удалил все файлы dll, pdb из локальных папок bin, очистил, перестроил, очистил все папки временных файлов ASP.NET, проверил, установлены ли флаги TRACE / DEBUG, проверил пути к DLL и т. Д.
Чтобы отложить это, чтобы это не потеряно, для затронутого проекта (ов):
Свойства проекта -> Сборка -> Дополнительно -> Отладочная информация: Полная.
Вы хотите проверить, что у вас выбрана конфигурация Debug, прежде чем вы это сделаете, если, конечно, вы не намеревались иначе.
источник
Если вы пытаетесь отладить проект ASP.NET, убедитесь, что в раскрывающемся списке «Свойства»> «Веб»> «Серверы» для проекта задано значение «IIS Express» (помимо проверки здесь всего остального).
источник
Я имел смешанные dll расширения c ++ / cli mfc, которые были оптимизированы даже при отладочной конфигурации (видно из окна VS 2017 Modules). Как и предполагалось в предыдущем ответе, я изменил: «В VS2013 перейдите по адресу: Инструменты -> Параметры -> Отладка -> Общие и включите« Использовать режим управляемой совместимости ». Это отключает поведение оценки новой функции». Эти настройки найти также в VS 2017.
Но этого было недостаточно, поэтому я также скопировал параметр UseDebugLibraries из файла проекта другого приложения MFC в файл проекта расширения dll.
Затем восстановите, и это решило проблему.
источник
В Visual Studio 2012 у меня работало включение опции « Управляемый » в меню «Инструменты»> «Отладка»> «Just-In-Time» .
источник