Я использую 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<char,*>" Priority="High">
<DisplayString>{ptr_,4}</DisplayString> //works...
<DisplayString>{ptr_,len_}</DisplayString> //doesnt work...
</Type>
</AutoVisualizer>
Потратив целый день проб и ошибок, я нашел очень простое решение. Так должно быть
"{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<char,*>" 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>
Других решений пока нет …