我开始在softwareengineering网站上写这个问题,但是似乎没有任何Dump
标签,因此我决定在这里写我的问题。
为了解决本机C ++应用程序的内存泄漏,我在Windbg中使用了一个基于PYKD库的脚本(heap_stat.py)。这样会给出如下报告:
...
0x0c3c88bc OwnApplication!CArray<ColumnInfo *,ColumnInfo *> Size:[0]
0x0c3c8900 mfc140u!CMapStringToString Size:[0], hashTable_Size:[17]
0x0c3c891c mfc140u!CMapStringToString Size:[264], hashTable_Size:[17]
0x0c3c8938 mfc140u!CMapStringToString Size:[0], hashTable_Size:[17]
...
(条目Size
和hashTable_Size
是自定义添加项)
创建其中两个报告并加以区别使我可以搜索内存泄漏。 (我有时会使用heap_stat.py -stat
)
heap_stat方法存在不同的问题:
vftable
条目来查找类的第一个字段。这是使用Windbg命令x /2 *!*vftable*
完成的)。 CServiceModule
(这是一个具有虚拟方法的类),但是heap_stat报告未提及任何CServiceModule
对象(很可能是Windbg命令heap -h 0
无法得到很好的解析)。因此,我开始怀疑:是否还有其他可自定义的工具(我希望它是可修改的,以便我可以添加自己的请求),该工具可以列出所有对象(内存地址)及其对应的类型/类?
供您参考:我正在使用C ++应用程序,内存转储使用procdump -e -ma
进行。