У меня и моей команды возникла проблема с отображением в Visual Studio бессмысленного вместо правильного содержимого строки, когда я приостанавливаю программуСтрока внутри содержит правильные данные, просто отладчик VS каким-то образом теряется.
Я пометил правильное содержимое зеленым, неверное красным.
Вы можете видеть, что std::string
определяется как
const std::string testStdString = "contents of std::string";
Отображается как "\bÄĎD\x19"
при наведении и просмотреокно. Но C-строка из .c_str()
отображается нормально. Консоль с записью cout
также отображается нормально. Это неправильное значение изменяется при каждом запуске.
В режиме необработанного представления вы можете видеть, что содержимое указателя, когда отображается как ASCII, выглядит так, как отладчик считает содержимым строки. Так может быть какая-то проблема, связанная с оптимизацией короткой строки?
Если вы расшифруете это как строку:
"\bÄĎD\x19"
[0x00000000]: 0x08 '\b'
[0x00000001]: 0xc4 'Ä'
[0x00000002]: 0xcf 'Ď'
[0x00000003]: 0x44 'D'
[0x00000004]: 0x19 '\x19'
[0x00000005]: 0x00 '\0'
Это соответствуетbuf
свойство, видимое в необработанном виде: 0x0000001944cfc408
(в обратном порядке).
Проблема влияет только на std::string
, std::wstring
и C-строки работают нормально. Когда я пытаюсь использовать std::string::c_str()
, он тоже отлично работает.
Когда я пытаюсь с простым новым проектом, эта проблема не возникает, но на нашем решении 18 с нативным решением C ++ и C # UWP это происходит.
Мы не используем ни компилятор сторонних разработчиков, ни стандартную библиотеку. Мы используем компилятор VC142 с /permissive-
(режим соответствия) на самой современной Visual Studio 2019 (16.3.4). Пробовал с VS141, не помогает.
Это начало происходить после некоторого обновления и не было исправлено по крайней мере до VS 16.3.4. Предыдущая версия, над которой она работала наверняка, была VS 2017, но некоторые из моей команды говорят, что, возможно, ранние версии 2019 года работали и для них.
Возможно, связанные (но без ответа и о VS 2013): Visual StudioОтладчик 2013, показывающий странные значения для std :: string
Я сообщил о проблеме в Сообществе разработчиков Visual Studio , возможно, они что-то узнают.
Обновление2019-10-22:
Попытка создать минимальный проект путем копирования проекта и удаления библиотек, ссылочных проектов и общих проектов, но с сохранением конфигурации основного проекта и решения - не может воспроизвести проблему таким образом. Так что это не (просто) конфигурация, это что-то о связанных проектах и библиотеках. Проекты / библиотеки либо создаются VS, либо из Windows SDK или Intel Media SDK.
Попробуем удалить их один за другим, возможно, это поможет точно определить проблему.