Visual Studio 2019: ошибка на панели «locals» во время отладки — «внутренняя ошибка при получении локального значения»

#visual-studio #debugging #visual-studio-2019

#visual-studio #отладка #visual-studio-2019

Вопрос:

Оригинальный вопрос

(Инструкцию по воспроизведению см. В Обновлении II)

Недавно я возился с Visual Studio 2019 во время сеанса отладки. Я закрепил некоторые свойства класса «SqlCommand» как «Избранное». С этого момента я получаю сообщение об ошибке «внутренняя ошибка, извлекающая локальное значение» в «locals».

Справа от столбца значений есть кнопка «обновить», и когда я нажимаю на нее, я получаю сообщение «Внутренняя ошибка в вычислителе выражений».

Теперь я не могу отключить это конкретное свойство, потому что дерево классов больше не может быть открыто.

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

Вы можете увидеть это на скриншоте ниже:

ошибка в окне Locals

Основной целью было бы каким-то образом очистить информацию о том, какое свойство классов закреплено в окне «locals».

Я уже попробовал несколько способов избавиться от ошибки.

  • Похоже, что VS каким-то образом хранит информацию о том, какие свойства помечены, поэтому я попытался удалить «ComponentModelCache» в AppData.
  • Я сбрасываю настройки.
  • Я использую средство восстановления в установщике.
  • Я удалил файл * .suo, а затем удалил всю папку .vs .
  • Я вижу ту же проблему, когда запускаю devenv в /safemode.
  • devenv / resetuserdata также не помогли
  • Я просмотрел журнал действий, но никаких подсказок нет.
  • Я изменил целевую структуру проекта с 4.7.2 на 3.5

Я использую стандарт Windows Server 2019, .Net Framework 4.7.2, Visual Studio 2019 16.7.6

Я использую следующий код в демонстрационном приложении:

 private static int Main(string[] args)
{
    SqlConnection conn = new SqlConnection();
    SqlCommand cmd = new SqlCommand();

    return 0;
}
  

ОБНОВЛЕНИЕ I

Это функция закрепления, о которой я говорю. Я показываю это на примере свойства WorkstationId объекта SqlConnection (потому что оно в SqlCommand больше не работает). Я полагаю, что я использовал его в тексте команды и свойстве parameters. Свойство pinnable является относительно новой функцией, представленной в версии 16.4

Закрепление свойства

ОБНОВЛЕНИЕ II: инструкция по воспроизведению

  1. Выполните новую установку Visual Studio 2019
  2. Создайте новый консольный проект
  3. Используйте код, который я опубликовал выше в исходном вопросе
  4. Установите точку останова после создания объекта Command
  5. Отладка проекта [F5]
  6. Откройте окно «Locals».
  7. Разверните переменную cmd и прокрутите, пока не найдете свойство «Параметры»
  8. Закрепите свойство параметров (как описано в обновлении I)
  9. Остановить отладку
  10. Запустите отладчик снова
  11. Откройте окно «Locals».
  12. Вы видите ошибку «внутренняя ошибка при получении локального значения»
  13. Нажмите на значок «Обновить» (это круглая стрелка в правой части столбца значений)
  14. Вы видите ошибку «Внутренняя ошибка в средстве вычисления выражений», как описано в исходном вопросе.

ОБНОВЛЕНИЕ III (больше экспериментов, которые не помогли)

  • Я использовал «исправить установку» из установщика VS.
  • Я удалил и переустановил VS.
  • Я полностью удалил всю папку %USER%/ AppData / …/ VisualStudio

Комментарии:

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

2. У меня такая же проблема на VS2019 после закрепления одного элемента в массиве во время отладки. И все еще не могу решить проблему.

Ответ №1:

В папке есть файл, вызываемый ObjectFavorites.json :

 %USER%/Documents/Visual Studio 2019/Visualizers
  

Он имеет следующее содержимое:

 {
  "$schema": "https://aka.ms/vs/debugger-managed-favorites-schema",
  "types": {
    "System.Data.SqlClient.SqlCommand": {
      "favorites": [
        "Parameters"
      ]
    }
  }
}
  

Удалите строку "Parameters" .

Вам даже не нужно останавливать или перезапускать VS, вы можете редактировать этот файл на лету. Запустите отладчик снова после удаления строки, и ошибка исчезнет.

Комментарии:

1. Большое вам спасибо. В моем случае я переопределил свойство базового класса, потому что имя свойства необходимо было сохранить, но тип данных изменился. И когда я затем допустил ошибку, пытаясь закрепить буквально «новую» версию, это нарушило представление переменной для всего класса.

Ответ №2:

На моей стороне я не сталкивался с такой же проблемой.

введите описание изображения здесь

Итак, возможно, вы могли бы попробовать следующие предложения:

1) щелкните правой кнопкой мыши в свойствах проекта -> Сборка -> Дополнительно -> — изменить информацию об отладке на Full .

2) установите флажок Использовать режим управляемой совместимости в меню Инструменты -> Параметры -> Отладка -> Общие

3) введите C:Usersxxx(current user)AppDataLocalMicrosoftVisualStudio16.0_xxxSettings

откройте каждый файл, а затем выполните поиск этого:

<PropertyValue name="UseVBCSLegacyExpressionEvaluator">0</PropertyValue>

Затем измените значение 0 на 1 . Сохраните изменения, перезапустите VS для повторного тестирования. А также вы должны запустить его от имени администратора.

введите описание изображения здесь

Комментарии:

1. Спасибо, что нашли время и помогли мне с проблемой. К сожалению, это не решило проблему. Когда я включаю режим управляемой совместимости config Use , я больше не вижу ошибки, но я также больше не могу использовать функцию закрепления. (Я описал функцию закрепления в обновлении по этому вопросу.) Как только я выключу ее, я снова смогу использовать функцию закрепления, но ошибка возвращается. Значение в «UseVBCSLegacyExpressionEvaluator» автоматически изменяется на 0 каждый раз, когда я закрываю VS. Я собираюсь предоставить инструкцию по воспроизведению позже сегодня.

2. Привет, Перри. Я проверю это еще раз. Между тем, вы можете ознакомиться с моей инструкцией по воспроизведению, которую я разместил внизу в разделе «Обновление II».

3. Конечно. Я использую блокнот, чтобы открыть каждый vs.settings файл, а затем изменить значение, затем нажмите Сохранить. Я пытаюсь несколько раз, а затем значение не будет изменено с момента перезапуска VS. И я попробую ваши шаги.

4. Теперь я могу подтвердить выполнение следующих шагов: 1. Измените параметры. 2. Закройте VS. 3. найдите все файлы * .vssettings в папке AppData … VisualStudio. 4. Откройте его в VSCode 5. Измените его с «0» на «1», сохраните его. 6. Откройте решение в VS, запустите отладчик. 7. Я могу проверить переменную, но не могу закрепить или отменить какое-либо свойство. 8. Остановите отладчик, закройте VS. 9. Снова откройте файл * .vssettings в VSCode -> значение снова равно «0». 10. Снова откройте VS, измените параметры на обычные, запустите отладчик, ошибка все еще там.

5. При изменении вы CurrentSettings.vssettings должны убедиться, что вы закрыли все VS в то время. 1. закройте все vs, введите C:UsersxxxAppDataLocalMicrosoftVisualStudio16.0_xxxSettingsCurrentSettings.vssettings 2. затем используйте NotePad вместо vs code , чтобы открыть его, измените значение, а затем щелкните Save . Закройте этот файл, перезапустите VS, а затем будет использовано измененное значение. Вы можете снять флажок Use Managed Compatibility Mode , поскольку вы этого хотите. Кроме того, следуйте вашим инструкциям, и я не столкнулся с той же ошибкой, которую вы описали, и, возможно, вы могли бы переключить другой компьютер для ее тестирования.