繁体   English   中英

使用运行时字符串在 natvis 中指定 object 类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM