如何让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::vector
?std::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>