gpt4 book ai didi

visual-studio - NATVIS 重新解释类型或别名类型

转载 作者:行者123 更新时间:2023-12-05 05:03:27 25 4
gpt4 key购买 nike

natvis 中有没有一种方法可以将类型重新解释为已经由 natvis 定义的类型?还是别名?

例如,我想做这种“技巧”(在我的上下文中确实是必要的,即使这对您来说听起来很奇怪,这是 JIT 符号生成的问题)

<Type Name="std::vector&lt;*,*&gt;">
<DisplayString>{*(stl1.dll!std::vector&lt;$T0,$T1&gt *)this}</DisplayString>
</Type>

但是显示扩展项不起作用,它只是显示一个字符串作为值(考虑到 'DisplayString' 角色,这似乎是合乎逻辑的)。

我也尝试过 SmartPointer 技巧,它做得更好,但事实证明当涉及基类时它不起作用(它只显示 SmartPointer 类型并忽略完全继承)

最佳答案

由于您没有展示您的类(class),我只能展示我自己的示例代码。

struct A { int x, y; };
struct B { int x, y; };
struct C { int v, w; };

int main()
{
A a{ 1,2 };
B b{ 3,4 };
C c{ 5,6 };
return 0;
}

还有 natvis:

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="A">
<AlternativeType Name="B"/>
<AlternativeType Name="C"/>
<DisplayString>A {x}, {y}</DisplayString>
</Type>
</AutoVisualizer>

这显示为 enter image description here

如您所见,AlternativeName 起到了作用,但它在原始类的 natvis 上是必需的。并且它要求两个类具有相同的成员/成员名称。

另请注意,在使用 natvis 时,最好启用 natvis 调试。转到菜单工具/选项/调试/“输出窗口”/“常规输出设置”并将“Natvis 诊断消息(仅限 C++)”设置为有用的值。

关于visual-studio - NATVIS 重新解释类型或别名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61678053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com