Как создать визуализатор отладки (VC14) для string_view?

Я использую boost :: string_view. (Www.boost.org/doc/libs/1_61_0/boost/utility/string_view.hpp)

У него есть const char * ptr_ и неподписанный член int len_ данных. При отладке его громоздко, в качестве визуализатора по умолчанию будет отображаться символ ptr_ с большим количеством символов, чем длина (так как string_view не завершается нулем).

Я попытался создать свой собственный визуализатор, посмотрев на визуализатор std :: string. Я могу получить строку, которая будет отображаться, если я жестко закодирую длину (скажем, 4), но я не могу заставить ее использовать переменную фактической длины. Любая помощь приветствуется. Разбитый пример:

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="boost::basic_string_view&lt;char,*&gt;" Priority="High">
<DisplayString>{ptr_,4}</DisplayString> //works...
<DisplayString>{ptr_,len_}</DisplayString> //doesnt work...
</Type>
</AutoVisualizer>

4

Решение

Потратив целый день проб и ошибок, я нашел очень простое решение. Так должно быть

"{ptr_,[len_]}"

Это задокументировано здесь:

https://msdn.microsoft.com/en-us/library/windows/hardware/dn936815(v=vs.85).aspx

Мой рабочий пример:

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="boost::basic_string_view&lt;char,*&gt;" Priority="High">
<DisplayString>{ptr_,[len_]s8}</DisplayString>
<Expand>
<Item Name="[size]" ExcludeView="simple">len_</Item>
<ArrayItems>
<Size>len_</Size>
<ValuePointer>ptr_</ValuePointer>
</ArrayItems>
</Expand>
</Type>
</AutoVisualizer>
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]