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
→ Ссылка
Это, действительно, баг. Я оформил баг-репорт и его взяли в разработку как подтвержденный
