Visual Studio调试器:为特定的C++结构/类注册显示格式



如何让Visual Studio调试器知道特定的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是否使用了一些特定于调试器的杂注或其他什么?

正如@退役忍者在评论中所提到的,可以使用natvis框架:https://learn.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2022

在VS中添加natvis文件

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

为该特定结构/类添加类型元素

语法示例可以在上面的链接中找到。

在我的情况下,以下元素定义足以将其显示为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>

最新更新