Подтвердить что ты не робот

"Функция оценки отключена, потому что предыдущая оценка функции была отключена". - в vs2012

Недавно я начал работу над VS2012.

Когда я отлаживаю свой код (это приложение SharePoint 2013) и пытаюсь получить значение переменных - я получаю снова и снова сообщение:

Function evaluation disabled because a previous function evaluation timed out.
You must continue execution to reenable function evaluation.

Я ранее работал в visual studio 2010 (для приложений SharePoint 2010) и почти никогда не получал это сообщение, пытаясь получить значение переменных в Quick Watch.

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

Я не всегда получаю ошибку на одни и те же переменные, но случайные - каждый раз разные переменные.

Есть ли у кого-нибудь еще эта проблема в VS2012?

И как я могу избавиться от него?

4b9b3361

Ответ 1

Pierre Fourgeaud прекрасно отвечает на ваш вопрос. Я добавил некоторые дополнения от Hans Passant:

Отладчик выполняет выражения часов в отдельном рабочем потоке что работает внутри процесса. Отладчик переносит на 5 секунд, затем объявляет, что выражение часов непригодное и отображается Msgstr "Функция отсрочена". Затем отладчик становится сварливым, а не многое может сделать с этой заблокированной нитью, вы обычно увидите "Функция оценка отключена, потому что предыдущая оценка функции была отключена. Вы должны продолжить выполнение для повторной оценки функций. хороший совет.

Ответ 2

Почему это происходит?

Кажется, такая ошибка может произойти просто, когда вы пытаетесь наблюдать за некоторыми переменными, которые должны быть потокобезопасными, но иногда эта реализация фреймворка не идеальна....

Чтобы избежать этой проблемы: при переходе по коду, где переменные привязаны к окнам или другим элементам управления, вы не показываете локальные переменные или "автоматические" переменные. Посмотрите на такие вещи только тогда, когда вы уверены, что ваши переменные безопасны для просмотра. Обратите внимание, что ошибка не обязательно появляется на небезопасных переменных. Используйте "немедленное" окно в безопасных (то есть неконтролируемых) переменных при работе в опасном коде.

Атрибуты данных всегда должны быть потокобезопасными. Но иногда между двумя реализациями (скажем, между Sharepoint 2010 и Sharepoint 2012 или двумя версиями .NET Framework), это правило иногда не соответствует действительности. Есть несколько примеров между VS2003 и 2005...

Как увеличить таймаут?

Вы можете увеличить таймаут, изменив значения раздела реестра HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\Debugger с помощью RegEdit.

Не забудьте перезапустить Visual Studio после изменения раздела реестра.