Невозможно получить значение local или аргумента, так как оно недоступно по указателю этой инструкции, возможно, из-за того, что оно было оптимизировано - PullRequest
178 голосов
/ 29 ноября 2011

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.

Ответы [ 16 ]

281 голосов
/ 26 августа 2014

Перейдите в Свойства проекта и в разделе «Сборка». Убедитесь, что флажок «Оптимизировать код» снят.

Кроме того, установите для раскрывающегося меню «Отладочная информация» значение «Полный» во вкладке «Дополнительные параметры» (вкладка «Сборка»).

101 голосов
/ 21 декабря 2015

Также в VS 2015 Community Edition

перейдите в Debug-> Options или Tools-> Options

и проверьте Debugging-> General-> Suppress JIT-оптимизация при загрузке модуля (только для управляемого)

57 голосов
/ 29 ноября 2011

Если вы скомпилируете с включенными оптимизациями, многие переменные будут удалены;например:

SomeType value = GetValue();
DoSomething(value);

здесь локальная переменная value обычно удаляется, вместо этого сохраняя значение в стеке - как если бы вы написали:

DoSomething(GetValue());

Кроме того, если возвращаемое значение вообще не используется , то оно будет отброшено с помощью «pop» (а не сохранено в локальном через «stloc», и снова; локальное не будет существовать).

Из-за этого в такой сборке отладчик не может получить текущее значение value, потому что он не существует - он существует только в течение короткого момента между GetValue() и DoSomething(...).

Итак;если вы хотите отладить ... не используйте сборку релиза!или, по крайней мере, отключите оптимизацию во время отладки.

22 голосов
/ 31 июля 2014

http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html

Это сработало для меня в visual studio 2013.

Все, что вам нужно сделать, это ..

  1. Щелкните правой кнопкой мыши проект, который вы не можете отладить.
  2. Перейти к проектам.
  3. Нажмите на меню сборки.
  4. Нажмите на расширенную кнопку.
  5. Установить значение раскрывающейся информации отладки на полное.
  6. Перестройте свой проект.
18 голосов
/ 22 июля 2015

Я только что столкнулся с этим и работал под Release конфигурацией сборки вместо Debug конфигурации сборки.Как только я переключился обратно на Debug, моя переменная снова показалась в часах.

7 голосов
/ 13 февраля 2014

Когда я столкнулся с той же проблемой, мне просто пришлось очистить свое решение перед перестройкой. Это позаботилось обо мне.

6 голосов
/ 19 декабря 2018

В визуальной студии 2017 зайдите в Debug-> Option, затем проверьте Debugging-> general-> и отметьте эту опцию

relevant Visual Studio 2017 Options

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

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

4 голосов
/ 26 октября 2017

Я столкнулся с той же проблемой, и решение для меня - изменить Solution Configuration с Release на Debug.Надеюсь, это поможет

3 голосов
/ 26 июля 2012

Я обнаружил, что у меня возникла та же проблема, когда я запускал проект и отлаживал его, подключаясь к процессу IIS. Я также работал в режиме отладки с отключенной оптимизацией. Хотя я думал, что код скомпилирован нормально, когда я отсоединился и попытался скомпилировать, одна из ссылок не была найдена. Это произошло из-за другого разработчика, который внес изменения и изменил расположение ссылки. Ссылка не отображалась с символом предупреждения, поэтому я думал, что все было хорошо, пока я не выполнил компиляцию. После исправления ссылки и повторного запуска все заработало.

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