Visual Studio не может показать значение std :: string

В компании, в которой я работаю, на некоторых из нас повлияла ошибка / ошибка в Visual Studio. Отладчику не удается отобразить значение / содержимое std :: string. Там написано «Ошибка чтения символов строки».

Некоторые фото проблемы: Простые строковые переменные Значения в отладчике

Следующая строка будет всегда воспроизводить проблему, но, как правило, каждая строка в коде (по крайней мере, ~ 1 000 000 строк) будет иметь проблему.

std::string testVar = "Something";

Изменить: Попробую сделать минимальный воспроизводимый пример в ближайшее время, но сейчас я не могу сделать один. Проблема возникает только в одном решении, состоящем из 93 проектов. До сих пор пробовал: Новое решение с той же версией компилятора (v120), любой версией компилятора, одинаковыми определениями препроцессора, VS2013 и VS2017 (обе проблемы возникают в Professional и Enterprise). Теперь устанавливаем VS2019, чтобы протестировать его.

Я строю строку из const char *, так что это, вероятно, не имеет ничего общего с распределением памяти и т. Д. И, самое главное, код работает. Таким образом, сам std :: string функционирует так, как должен, но отладчик не может показать его значения. Размер правильный, насколько я вижу, но емкость всегда равна 0xcccccccccccccccc. Для символов в строке написано: «Невозможно прочитать память». Детальный просмотр строки в отладчике

Эта проблема возникает только с std :: string, а не с std :: wstring или char * или чем-то еще. Кроме того, когда я открываю новое решение, std :: string будет отображаться правильно. Он не отображается только в решении с более чем 91 проектом. Воспроизводится в VS2017 и VS2013, но мы используем компилятор v120. Пробовал константные переменные и имел переменную в куче или в стеке, это не имеет значения.

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

Эта ошибка присутствует с этой недели, мы не могли наблюдать ничего подобного раньше или даже больше, чем неделю назад. У 3 из нас есть эта проблема, но у некоторых других нет. Мы все работаем в основном на одних и тех же машинах с одинаковыми настройками и обновлениями. Единственное отличие состоит в том, что рабочая VS - это Professional, и мы используем версию Enterprise.

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

Редактировать: может быть важно, что при отладке с пошаговым выполнением инструкций отладчик не войдет в конструктор или любую из функций std :: string (в xstring), он просто перешагнет через него, как обычную переменную int назначение, а не вызов функции. Но установка точки останова в исходном коде std :: string будет действительно работать, и отладчик на этом остановится.

Связанные вещи, которые я нашел, но не предложил решения (попробовал методы здесь, но проблема не исчезла): Visual C ++ 2010 отказывается показывать значение std :: string при отладке. Показывает <Bad Ptr>

Отладчик Visual Studio неправильно отображает std :: string в отладке

https://developercommunity.visualstudio.com/content/problem/782573/visual-studio-debugger-doesnt-display-stdstring-pr.html

Также попытался возиться с natvis в соответствии с этим: Как визуализировать простую строку std :: string с natvis?

Всего 1 ответ


Не удалось найти основную причину проблемы, но обновление от VS2013 / VS2017 с инструментами сборки v120 до VS2019 v142 решило эту проблему.

Скорее всего, старые инструменты сборки как-то связаны с этим.


Есть идеи?

10000