【发布时间】:2021-09-13 16:31:48
【问题描述】:
背景
我有一个用 C++ 编写的服务器的错误报告。错误报告包含对意外行为和内存转储的描述。现在我尝试从内存转储中获取信息。我正在尝试检查该内存转储的内存内容。
问题
我能够找到指向希望检查以分析问题的对象的指针。它是指向某个接口的指针。现在我知道这个指针指向在匿名命名空间中定义的某些特定类型的对象。遗憾的是 VS 没有推断出该磁带(基于运行时信息)。 VS 向我展示的唯一指向接口的指针是虚拟表的内容。因此,要检查此对象的内容,我必须指示 Visual Studio 将此指针向下转换为该类型。问题是我应该输入什么来满足 Visual Studio。
注意,因为这是内存转储断点或继续执行不是一种选择。我无法在我的开发环境中重现问题,所以这个转储是我找到问题的最佳机会。
添加到手表这个:
(InterfaceImplementation*)(some_pointer->pointer_to_interafece)
由于 VS 说:
标识符“InterfaceImplementation”未定义
可能的解决方案
AFAIK 匿名命名空间实际上会生成一个具有随机名称的命名空间。所以为了解决我的问题,我应该找到一种方法来提供这个生成的随机名称,这样我就可以使用完整的符号名称。
问题
有没有办法检查匿名命名空间中的符号? 我可以在匿名命名空间中找到我的符号以识别该命名空间吗?
【问题讨论】:
-
我有一个模糊的回忆,需要让调试器在具有本地命名空间的源文件中的某个函数处停止,以便在该命名空间中定义的符号对其可见。我只是看
some_pointer并扩大它以查看成员还不够吗? -
这是生产中的内存转储。它停在原地,纯属偶然。正如我写的那样,我有一个指向接口的指针,VS 没有推断出实际类型,所以我必须强制转换才能看到该对象的内容。
标签: c++ visual-studio debugging memory-dump