[英]Using a runtime string to specify object type in natvis
说我有一个结构
struct Foo
{
void* bar;
const char* barTypeName;
}
bar
是一些类型擦除的东西, barTypeName
是一个正确的 C++ 类型标识符,用于标识bar
的实际类型。
我想在 Visual Studio 调试器中对此进行可视化,尤其是在 Watch window 中。没有涉及的模板可以为我提供正确的类型。 类型本身通常是 POD,调试器无法自动找出类型。
问题:在 natvis 中有什么方法可以告诉调试器bar
的类型,以便它在 Watch window 中正确显示?
我在natvis schema中偶然发现了<MostDerivedType>
,但据我所知没有记录,我也不知道它是否做了我想要的。
我很高兴使用<CustomVisualizer>
并在 C++ 中实现它,如果它提供了一种处理方法而 natvis 没有。
如果您愿意为每个包装的 POD 添加一个DisplayString
,那将非常简单。 如果你想要一个通用的解决方案,那可能是不可能的。
<Type Name="Foo">
<DisplayString Condition='strcmp(barTypeName,"char")'>{(char)bar}</DisplayString>
<DisplayString Condition='strcmp(barTypeName,"int")'>{(int)bar}</DisplayString>
</Type>
测试代码:
char c{};
int i{};
Foo fooc{ &c, "char" };
Foo fooi{ &i, "int" };
这是 VS 2019 (16.11.11) 调试器中的结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.