如何为String_view创建(VC14)调试可视化器

Howto create (VC14) debug visualiser for string_view?

本文关键字:VC14 调试 可视化 创建 String view      更新时间:2023-10-16

我正在使用boost :: string_view。(www.boost.org/doc/libs/1_61_0/boost/utility/string_view.hpp)

它具有const char* ptr_和一个未签名的int len_数据成员。当调试繁琐的时,默认的可视化器将显示带有比长度更多的char pr_(因为String_view未终止)。

我尝试通过查看std :: String Visualiser创建自己的可视化器。如果我用硬编码长度(说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>

花费一整天的反复试验后,我发现了令人沮丧的简单解决方案。应该是

"{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>