内存泄漏调查

时间:2017-12-04 07:10:22

标签: windows debugging memory-leaks windbg umdh

我正在调查运行在32位Win 7上的应用程序的内存,它是用混合模式构建的(VC ++和C#.net)

我在尝试分析泄漏原因时已经完成了以下步骤:

  1. 在GFlags中启用了用户模式堆栈跟踪数据库

  2. 使用UMDH.exe我运行了2个快照之间的区别,我看到最高内存分配

    +  243040 ( 15884374 - 15641334) 872075 allocs  BackTrace17A3C8
    +  243026 ( 872075 - 629049)    BackTrace17A3C8 allocations
    
    ntdll!RtlAllocateHeap+00000274  
    

    它只包含一行而没有任何调用堆栈。这让我很困惑。

  3. 使用Windbg进一步分析:

    1. 在Windbg中,键入以下命令:!heap -stat -h 02150000(其中2150000是具有泄漏的堆的地址)在比较多个转储后,我看到大小为1的内存块正在增加时间,可能是泄露的记忆。

    2. 输入以下命令:!heap -flt s 1为UserPtr提供这些分配,最后:

    3. 在其中一些地址上键入!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分析相匹配。在这里我也看不到调用堆栈。

    4. 任何人都可以帮我指点一个方向吗?

0 个答案:

没有答案