Ответ 1
Пока проект находился в режиме отладки, решение не было. Когда я изменил его, он сработал.
Я использую Visual Studio 2010 в режиме отладки, и у меня нет "оптимизировать код". Я не могу быстро просмотреть (или навести) любую переменную в отладчике. Я получаю эту ошибку "Не могу оценить выражение, потому что код текущего метода оптимизирован".
Даже такая строка, как: int я = -3, делая быстрый просмотр на i, я получаю "Не могу получить значение local или аргумент" я ", поскольку он недоступен в этом указателе инструкции, возможно, потому что он оптимизирован прочь".
Ссылка , на которую ссылается подобный вопрос, похоже, не применяется.
Есть ли параметр, который мне не хватает?
Пока проект находился в режиме отладки, решение не было. Когда я изменил его, он сработал.
У меня была эта проблема, когда я использовал VS 2010. Моя конфигурация решения была выбрана (Debug). Я решил это, сняв флажок Свойство "Оптимизировать код" в свойствах проекта. Проект (правый щелчок) = > Свойства = > Сборка (вкладка) = > снимите флажок Оптимизировать код
Похоже, вы отлаживаете оптимизированную/выпущенную сборку, несмотря на то, что оптимизированная коробка не проверена. Вы можете попробовать:
Если вы не видите пункт меню "Модули" в меню "Отладка → Windows", вам может потребоваться добавить его в меню "Настроить...".
В VS2013 перейдите к: Инструменты → Параметры → Отладка → Общие и включите "Использовать режим совместимой совместимости". Это отключает поведение новой функции.
Попробуйте запустить в режиме отладки. Если вы работаете в режиме выпуска, вы получите это сообщение.
У меня такая же проблема. Но в моем случае атрибут Debuggable
был жестко закодирован в файле AssemblyInfo.cs
моего проекта, а потому (over-), написанном компиляцией. Он работал после удаления строки с указанием атрибута Debuggable
.
Моя ситуация не была охвачена ни одним из вышеуказанных ответов. Я обнаружил следующее: статья MSDN о многопоточности, в которой объясняется, что при застревании в некоторых примитивных нативных операциях многопоточности отладчик не может получить доступ к данным. Например, когда поток сидит на Task.Wait(), это происходит.
У меня была такая же проблема в VS2008. В моем случае это было решено путем решения-rebuild.
Помимо @Kragen, если вы отлаживаете веб-проект
закройте визуальную студию и попробуйте удалить временные файлы в папке C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET
Еще одна вещь, которую вы можете сделать, - создать файл с тем же именем, что и оптимизированная 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
Когда вы видите "Невозможно оценить выражение, потому что код текущего метода оптимизирован". после выдачи инструкции Debugger.Break()
, пожалуйста, убедитесь, что вы нажимаете F10 для перехода к следующему утверждению.
Как только вы перейдете к следующему оператору и предположим, что вы используете сборку Debug, это сообщение должно исчезнуть.
Относительно проблемы с параметром "Оптимизировать код", который был UNCHECKED, но код все еще компилируется как оптимизированный: что, наконец, помогло мне после попытки проверить флажок "Включить неуправляемый отладку кода" на той же странице настроек (Свойства проекта - Отладка), Он напрямую не связан с оптимизацией кода, но с этим включен, VS больше не оптимизирует мою библиотеку, и я могу отлаживать.
У меня была та же проблема при отладке библиотеки классов из тестового веб-приложения. Я ссылался на версию выпуска в тестовом стенде и был настроен на оптимизацию в свойствах библиотеки классов.
Снимите флажок "Оптимизировать код" для версии выпуска в свойствах библиотеки классов, просто пока я его пишу, решил проблему.
Я понимаю, что это более поздний ответ, но я нашел еще одну ссылку на способ решения этой проблемы, которая может помочь другим в будущем. Эта веб-страница описывает настройку переменной окружения (COMPLUS_ZapDisable = 1), которая предотвращает оптимизацию, по крайней мере, для меня! (Не забывайте вторую часть отключения процесса хостинга Visual Studio.) В моем случае это могло быть еще более актуальным, потому что я отлаживал внешнюю DLL через сервер символов, но я не уверен.
У меня была эта проблема с проектом F #, который был здесь и там между Visual Studio и MonoDevelop, возможно, возник из последних (я забыл). В VS флажок "Оптимизация" был снят, но оптимизация, разумеется, имела место в отношении отладчика.
После сравнения XML файла проекта со здоровым, проблема была очевиден: у здорового проекта была явная строка <optimize>false</optimize>
, тогда как у плохого отсутствовала его полностью. VS, очевидно, вывел из своего отсутствия, что оптимизация была отключена, а компилятор делал обратное.
Решение заключалось в том, чтобы добавить это свойство в файл проекта и перезагрузить.
Для меня это происходило в VS2017 и VS2019. Это прекратилось после того, как я выбрал опцию "Подавленная оптимизация JIT при загрузке модуля".
У меня была такая же проблема в 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, убедитесь, что раскрывающийся список Properties > Web > Servers установлен в "IIS Express" (в дополнение к проверке всего остального здесь).
Убедитесь, что вы находитесь в режиме отладки.
Из обозревателя решений:
1 - Щелкните правой кнопкой мыши по вашему проекту
2 - Свойства
3 - Нажмите на Build
4 - Снимите флажок "Оптимизировать код".
Я начал получать это сообщение, когда перешел на Visual Studio 2017. Ни одна из идей на этой странице, которую я пробовала, не работала для меня. На другом посту я нашел это предложение, и он работал - удалил:
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
... из вашего файла AssemblyInfo.
Я использовал смешанные DLL-расширения c++/cli mfc, которые были оптимизированы даже при конфигурации отладки (видно из окна VS 2017 Modules). Как и в предыдущем ответе, я изменил "В VS2013 перейдите в: Инструменты → Параметры → Отладка → Общие и включите" Использовать режим совместимой совместимости ", что отключает поведение новой функции". Эти настройки также находятся в VS 2017.
Но этого было недостаточно, поэтому я также скопировал параметр UseDebugLibraries из другого файла проекта приложения MFC в файл проекта dll расширения.
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
...
<UseDebugLibraries>true</UseDebugLibraries>
Затем перестройте и устраните проблему.