首页 > 解决方案 > 如何在运行时根据地址确定 C++ 对象的类型?

问题描述

我想从内存地址确定对象的类型,这样我就可以在 VS Watch 窗口中应用正确的转换并查看对象。

我正在尝试在反汇编视图中进行调试,因为我自己的代码作为 DLL 加载到我没有源代码或 pdb 的现有 exe 中。

typeid 和 dynamic_cast 的存在让我希望有某种方法可以实现(可能以有限的方式)而无需任何额外的编码。

但是,如果解决方案包括修改我的代码,我很高兴,我可以访问所有类定义,尽管我不一定要更改其中一些的内存布局。

我还对对象的分配进行了覆盖,因此我有机会在这里为我自己的目的分配额外的内存,例如,在我可以放置某种名称标签的对象之前的 4 个字节。

标签: visual-studioassemblymemoryc++03watch-window

解决方案


回答我自己的问题。我使用一个为跟踪分配而设计的系统解决了这个问题: http ://www.almostinfinite.com/memtrack.html 它是新的替代品,它将用分配的类型 id 标记所有分配(以及其他信息)。


推荐阅读