如何执行转储分析

时间:2019-04-29 12:20:11

标签: c++ windbg dump pykd

我开始在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]
...

(条目SizehashTable_Size是自定义添加项)

创建其中两个报告并加以区别使我可以搜索内存泄漏。 (我有时会使用heap_stat.py -stat

heap_stat方法存在不同的问题:

  1. heap_stat仅查找具有虚拟方法的对象(它使用类的符号定义的vftable条目来查找类的第一个字段。这是使用Windbg命令x /2 *!*vftable*完成的)。
    当类没有虚拟方法时,heap_stat找不到相应的对象。
  2. heap_stat似乎是错误的:今天早晨,我正在处理CServiceModule(这是一个具有虚拟方法的类),但是heap_stat报告未提及任何CServiceModule对象(很可能是Windbg命令heap -h 0无法得到很好的解析)。

因此,我开始怀疑:是否还有其他可自定义的工具(我希望它是可修改的,以便我可以添加自己的请求),该工具可以列出所有对象(内存地址)及其对应的类型/类?

供您参考:我正在使用C ++应用程序,内存转储使用procdump -e -ma进行。

0 个答案:

没有答案