Visual Studio 调试器:注册特定 C++ 的显示格式 struct/class

Visual Studio Debugger: Register a display format for a specific C++ struct/class

如何让 Visual Studio 调试器知道特定的 C++/C 结构应该以特定的格式显示?

例如,我有一个包含 2 个指针的 C 结构,它们代表数组的开始和结束,如下所示:

typedef struct
{
    VEC_VALUE_T* __restrict DataBegin_;
    VEC_VALUE_T* __restrict DataEnd_;
    VEC_VALUE_T* __restrict MemEnd_;
    VEC_ALLOC* __restrict Allocator_;
} VEC;

如何在调试器中将其显示为 std::vector

来自另一个 POV 的相同问题: 调试器如何知道如何显示 std::vectorstd::vector 是否使用了一些特定于调试器的编译指示之类的?

@retired-ninja在评论中提到,可以使用natvis框架: https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2022

在VS中添加natvis文件

右键单击项目选项卡 -> 添加新项目 -> 实用程序 -> .natvis

为该特定内容添加类型元素 struct/class

有关语法的示例可以在上面的 link 中找到。

在我的例子中,以下元素定义足以将其显示为 std::vector:

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

    <Type Name="::VEC">
        <DisplayString>{{ size={DataEnd_ - DataBegin_}, capacity={MemEnd_ - DataBegin_} }}</DisplayString>
        <Expand>
            <Item Name="[size]" ExcludeView="simple">DataEnd_ - DataBegin_</Item>
            <Item Name="[capacity]" ExcludeView="simple">MemEnd_ - DataBegin_</Item>
            <ArrayItems>
                <Size>DataEnd_ - DataBegin_</Size>
                <ValuePointer>DataBegin_</ValuePointer>
            </ArrayItems>
        </Expand>
    </Type>

</AutoVisualizer>