我正在调查运行在32位Win 7上的应用程序的内存,它是用混合模式构建的(VC ++和C#.net)
我在尝试分析泄漏原因时已经完成了以下步骤:
在GFlags中启用了用户模式堆栈跟踪数据库
使用UMDH.exe我运行了2个快照之间的区别,我看到最高内存分配
+ 243040 ( 15884374 - 15641334) 872075 allocs BackTrace17A3C8
+ 243026 ( 872075 - 629049) BackTrace17A3C8 allocations
ntdll!RtlAllocateHeap+00000274
它只包含一行而没有任何调用堆栈。这让我很困惑。
使用Windbg进一步分析:
在Windbg中,键入以下命令:!heap -stat -h 02150000
(其中2150000是具有泄漏的堆的地址)在比较多个转储后,我看到大小为1的内存块正在增加时间,可能是泄露的记忆。
输入以下命令:!heap -flt s 1
为UserPtr提供这些分配,最后:
在其中一些地址上键入!heap -p -a address
始终显示以下分配调用堆栈:
address 0813fe08 found in
_HEAP @ 2150000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
0813fdf0 0004 0000 [00] 0813fe08 00001 - (busy)
76ecd84c ntdll!RtlAllocateHeap+0x00000274
与UMDH分析相匹配。在这里我也看不到调用堆栈。
任何人都可以帮我指点一个方向吗?