Отладчик Visual Studio неправильно отображает std :: string в отладке - PullRequest
4 голосов
/ 16 октября 2019

У меня и моей команды возникла проблема с отображением в Visual Studio бессмысленного вместо правильного содержимого строки, когда я приостанавливаю программуСтрока внутри содержит правильные данные, просто отладчик VS каким-то образом теряется.

Я пометил правильное содержимое зеленым, неверное красным.

std::string gibberish issue in VS 16.3.4

Вы можете видеть, что std::string определяется как

const std::string testStdString = "contents of std::string";

Отображается как "\bÄĎD\x19" при наведении и просмотреокно. Но C-строка из .c_str() отображается нормально. Консоль с записью cout также отображается нормально. Это неправильное значение изменяется при каждом запуске.

В режиме необработанного представления вы можете видеть, что содержимое указателя, когда отображается как ASCII, выглядит так, как отладчик считает содержимым строки. Так может быть какая-то проблема, связанная с оптимизацией короткой строки?

raw view of the string

Если вы расшифруете это как строку:

"\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.
Попробуем удалить их один за другим, возможно, это поможет точно определить проблему.

1 Ответ

0 голосов
/ 13 ноября 2019

Кто-то в моей команде нашел потенциальное решение, у нас были разные ЭЛТ. Одна из библиотек была /MD, а остальные /MDd. Но, изменив это, не очень исправить. Мы использовали /MD, потому что при /MDd библиотека работала со сбоями. Речь шла о проекте mfx_dispatch для Intel Media SDK.

Что исправило это, так это изменение набора инструментов этой библиотеки с 141 на 142. В последнем случае std::string было доступно для чтения в окне просмотра.

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

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