wmemchr и natvis

Есть простой код

class CTest {
public:
    const wchar_t * attr;
    CTest(const wchar_t * attr) {
        this->attr = attr;
    }
};

int main() {
    CTest test(L"_color=red");
    const wchar_t * foundLen = wmemchr(test.attr, '=', wcslen(test.attr));
    std::cout << foundLen;
}

Замечательно работает и выводит =red.

Теперь к этому классу пишу визуализатор

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="CTest">
    <Expand>
      <CustomListItems>
        <Variable Name="len" InitialValue="wcslen(attr)"/>
        <Variable Name="value" InitialValue="wmemchr(attr, '=', len)"/>
        <Variable Name="value2" InitialValue="wmemchr(attr, '=', len * 2)"/>
        <Item Name="Value">value</Item>
        <Item Name="Value2">value2</Item>
      </CustomListItems>
    </Expand>
  </Type>
</AutoVisualizer>

и вижу такую картину

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

я правильно понимаю, что в парсере natvis баг и он воспринимает последний параметр wmemchr как максимальную длину в байтах и делит ее пополам?

Версия студии Microsoft Visual Studio Community 2019 (Version 16.8.3)


Ответы (1 шт):

Автор решения: Anton Shchyrov

Это, действительно, баг. Я оформил баг-репорт и его взяли в разработку как подтвержденный

→ Ссылка