如何为 string_view 创建 (VC14) 调试可视化工具?
Howto create (VC14) debug visualiser for string_view?
我正在使用 boost::string_view。 (www.boost.org/doc/libs/1_61_0/boost/utility/string_view.hpp)
它有一个 const char* ptr_ 和一个 unsigned 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>
我正在使用 boost::string_view。 (www.boost.org/doc/libs/1_61_0/boost/utility/string_view.hpp)
它有一个 const char* ptr_ 和一个 unsigned 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>