Visual Studio 2010 уничтожает (нет другого слова) данные в одном из аргументов функции в небезопасном блоке. Что может вызвать эту ошибку? Следующее сообщение показывает отладчик.
Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
c#
visual-studio-2010
debugging
любопытство
источник
источник
Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away. System.Threading.Tasks.TaskExceptionHolder
Ответы:
Перейдите в Свойства проекта и в разделе «Сборка». Убедитесь, что флажок «Оптимизировать код» снят.
Кроме того, установите раскрывающийся список «Отладочная информация» на «Полный» во вкладке «Дополнительные параметры» (на вкладке «Сборка»).
источник
Также в VS 2015 Community Edition
зайдите в Debug-> Options или Tools-> Options
и проверьте Отладка-> Общие-> Подавить оптимизацию JIT при загрузке модуля (Только управляемые)
источник
Если вы скомпилируете с включенной оптимизацией, многие переменные будут удалены; например:
здесь локальная переменная
value
обычно удаляется, вместо этого сохраняя значение в стеке - как если бы вы написали:Кроме того, если возвращаемое значение не используется вообще , оно будет отброшено с помощью «pop» (а не сохранено в локальном через «stloc», и снова; локальное не будет существовать).
Из-за этого в такой сборке отладчик не может получить текущее значение,
value
потому что он не существует - он существует только на короткий промежуток времени междуGetValue()
иDoSomething(...)
.Так; если вы хотите отладить ... не используйте сборку релиза! или, по крайней мере, отключите оптимизацию во время отладки.
источник
http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html
Это сработало для меня в визуальной студии 2013 года.
Все, что вам нужно сделать, это ..
источник
Я просто столкнулся с этим, и я работал под
Release
конфигурацией сборки вместоDebug
конфигурации сборки. Однажды я снова переключился наDebug
свою переменную, показанную в часах.источник
В Visual Studio 2017 зайдите в Debug-> Option, затем проверьте Debugging-> general-> и отметьте эту опцию
источник
Когда я столкнулся с той же проблемой, мне просто пришлось очистить свое решение перед восстановлением. Это позаботилось об этом для меня.
источник
Относительно проблемы со свойством «Оптимизировать код» НЕПРАВИЛЬНО, но код все еще компилировался как оптимизированный: в конце концов, после всех попыток мне помог флажок «Включить отладку неуправляемого кода» на той же странице настроек (Свойства проекта - Отладка). Это не имеет прямого отношения к оптимизации кода, но с этим включенным VS больше не оптимизирует мою библиотеку, и я могу отлаживать.
источник
Enable unmanaged code debugging
. ЕстьEnable native code debugging
, я пытался проверить это, но это не имело никакого значения.Я столкнулся с той же проблемой, и решение для меня - изменить
Solution Configuration
сRelease
наDebug
. Надеюсь, поможетисточник
В моем случае я работал над проектом веб-API и, хотя проект был настроен на полную отладку, я все еще видел эту ошибку каждый раз, когда подключался к процессу IIS, который пытался отладить. Затем я понял, что профиль публикации был настроен на использование конфигурации выпуска. Итак, еще одно место, которое нужно проверить, - это ваш профиль публикации, если вы используете функцию «Опубликовать» вашего проекта dotnet web api.
источник
Я обнаружил, что у меня возникла та же проблема, когда я запускал проект и отлаживал его, подключаясь к процессу IIS. Я также работал в режиме отладки с отключенной оптимизацией. Хотя я думал, что код скомпилирован нормально, когда я отсоединился и попытался скомпилировать, одна из ссылок не была найдена. Это произошло из-за другого разработчика, который внес изменения и изменил расположение ссылки. Ссылка не отображается с символом предупреждения, поэтому я думал, что все было хорошо, пока я не выполнил компиляцию. После исправления ссылки и повторного запуска все заработало.
источник
В качестве дополнительного ответа для тех, кто сталкивается с этой проблемой при отладке веб-приложения сайтов Azure:
Например, при развертывании из GitHub код компилируется на сервере Azure, оптимизированном по умолчанию.
Я говорю серверу компилировать отладочным способом, установив
SCM_BUILD_ARGS
в/p:Configuration=Debug
но есть и другие варианты. Смотрите это: http://azure.microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-azure-web-sites-part-3-multi-instance-environment-and-git /
источник
В Visual Studio 2012:
Перейдите в свойства проекта -> Отладка -> Снимите флажок «Включить процесс размещения Visual Studio»
источник
Для веб-приложений есть еще одна важная проблема, которая заключается в выборе правильной конфигурации в процессе публикации приложения.
Вы можете построить свое приложение в режиме отладки, но может случиться так, что вы опубликуете его в режиме выпуска, который по умолчанию оптимизирует код, но IDE может ввести вас в заблуждение, поскольку он показывает режим отладки, когда опубликованный код находится в режиме выпуска. Вы можете увидеть детали в снимке ниже:
источник
Проверьте, есть ли у вас атрибут Debuggable в вашем файле AssemblyInfo. Если есть, удалите его и пересоберите решение, чтобы увидеть, станут ли доступны локальные переменные.
Мой атрибут debuggable был установлен в: DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints, который в соответствии с этой статьей MSDN указывает компилятору JIT использовать оптимизации. Я удалил эту строку из моего файла AssemblyInfo.cs, и локальные переменные были доступны.
источник
В Visual Studio 2017 или 2015:
Перейдите в Решение, щелкните правой кнопкой мыши решение, затем выберите Свойства-> выберите все настройки-> Отладка, затем нажмите ОК. После этого Rebuild and Run это решение сработало для меня.
источник
Я была такая же проблема. Попробовал все вышеперечисленное и обнаружил, что мне также пришлось удалить все внутри {PROJECT_ROOT} \ bin \ Release \ netcoreapp2.2 и {PROJECT_ROOT} \ obj \ Release \ netcoreapp2.2 для моего проекта. Это определенно подходит для публикации, потому что, хотя я использую средства развертывания / bitbucket в своем веб-приложении Azure, я попробовал «Построить» >> «Опубликовать» >> «Опубликовать в Azure», потому что я хотел проверить, какие файлы были фактически развернуты.
источник
Раньше такая же проблема была с приложением WPF, и все решения здесь НЕ решали проблему . Проблема заключалась в том, что модуль уже был оптимизирован, поэтому следующие решения НЕ РАБОТАЮТ (или их недостаточно для решения проблемы):
Модуль все еще загружен Оптимизирован. Смотрите следующий скриншот:
Чтобы решить эту проблему, вы должны удалить оптимизированный модуль. Чтобы найти оптимизированный путь к модулю, вы можете использовать такой инструмент, как Process Hacker .
Дважды щелкните вашу программу на « панели процессов », затем в новом окне откройте вкладку « Сборки .NET ». Затем в столбце « Путь к собственному изображению » вы найдете все пути к оптимизированным модулям . Найдите файл, который вы хотите де-оптимизировать, и удалите папку (см. Скриншот ниже): (Я размыл название своей компании по понятным причинам)
Перезапустите приложение (с установленным флажком в шаге 1), и оно должно работать.
Примечание . Файл может быть заблокирован, так как он был открыт другим процессом, попробуйте закрыть Visual Studio. Если файл все еще заблокирован, вы можете использовать такую программу, как Lock Hunter
источник