从转储中确定内存中存在的对象类型

Posted

技术标签:

【中文标题】从转储中确定内存中存在的对象类型【英文标题】:determine the type of object present in memory from a dump 【发布时间】:2014-10-20 11:24:21 【问题描述】:

我在使用大型遗留应用程序(32 位、窗口、带有 GUI 的 c++)时遇到内存问题。内存增加到最大限制(2G0)然后应用程序崩溃。 无法使用实时内存分析器(如 AQTime)(太慢,对内存消耗的影响太大)。 例如,我可以使用 windows 工具(通过任务管理器)生成转储。

问题:是否可以像在 dotnet(使用 .net Memory Profiler)中一样,从生成的转储中获得内存中存在的动态分配对象的类型?

【问题讨论】:

这里的一般智慧是不要等到进程崩溃再开始寻找泄漏。不要在 C++ 应用程序上使用 .NET 工具,它们不会告诉你任何事情。如果您不能使用 crtdbg.h 中的调试分配器,那么 umhd.exe 是首选武器。 【参考方案1】:

如果你已经生成了调试信息(pdb文件),就可以在一定程度上将内存映射到对象中。

【讨论】:

使用windbg之类的工具? @Guillaume07 可能你也可以在 Visual Studio 中调试它。 msdn.microsoft.com/en-us/library/d5zhxt22.aspx

以上是关于从转储中确定内存中存在的对象类型的主要内容,如果未能解决你的问题,请参考以下文章

变量作用域和内存问题

基本类型引用类型的复制传递参数

YAML - 转储没有类型/标签的嵌套对象

栈堆和拷贝

基本类型引用类型基本包装类型和单体内置对象

基本类型和引用类型的值