在 autoexp.dat 中创建一个简单的 VS2008 可视化工具(转换问题)

Posted

技术标签:

【中文标题】在 autoexp.dat 中创建一个简单的 VS2008 可视化工具(转换问题)【英文标题】:Creating a simple VS2008 visualizer inside autoexp.dat (problem with casting) 【发布时间】:2011-02-04 18:26:11 【问题描述】:

我有一个混合 C/C++ 的大型项目。我为 ICU UnicodeString 类创建了一个简单的可视化工具,如下所示...

[inside autoexp.dat]
icu_4_2::UnicodeString 
        preview     ([$c.fUnion.fFields.fArray,su])

...效果很好。在调试器中,无论我在哪里看到对象,现在都可以在预览行中看到文本。

然后我创建了一个包含这些对象之一的包装类,如下所示...

class StringHandleData

public:
    icu_4_2::UnicodeString str;
;

...然后为此创建了另一个可视化工具...

[inside autoexp.dat]
StringHandleData 
    preview     ([$c.str.fUnion.fFields.fArray,su])

...再次,工作正常。每当我在调试器中看到 StringHandleData 对象时,我都会在字符串中看到文本。

但是,当我定义一个可以在这样的 C 代码中使用的 typedef 时,我的问题就出现了......

typedef void* StringHandle;

...实际上只是一个指向 StringHandleData 对象的指针。因此,当我尝试为这样的 StringHandle 类型创建可视化工具时...

[inside autoexp.dat]
StringHandle 
    preview     ([((StringHandleData)$c).str.fUnion.fFields.fArray,su])

...它不起作用。我也尝试了许多其他投射对象的方法,但到目前为止还没有运气。如果我去我的监视窗口并像这样投射一个 StringHandle... (StringHandleData*)stringHandle 然后调试器会正确地进行投射和预览 - 但我似乎无法做到它会自动从 autoexp.dat 内部

感谢您的帮助。

【问题讨论】:

你必须告诉调试器取消引用指针。类似*(StringHandleData*) 我想我已经尝试了几乎所有 *, &, 的组合。并且 -> 没有成功。感觉就像我 20 年前刚开始学习 C 时用来处理编译器错误的方式。 【参考方案1】:

Visual Studio 的可视化器对 typedef 视而不见,会认为 StringHandlevoid *

【讨论】:

以上是关于在 autoexp.dat 中创建一个简单的 VS2008 可视化工具(转换问题)的主要内容,如果未能解决你的问题,请参考以下文章

在调试可视化工具中转换为 std::string (autoexp.dat)

为了能够检查向量中包含的类的数据成员,我需要在 autoexp.dat 中输入啥?

Autoexp.dat 版本

如何在 VS2012 中创建本地数据库缓存?

为啥在 VS 2015 中创建的默认 windows 8 通用应用程序具有深色背景

如何在 vs2010 中创建/添加 sql server 精简版数据库?