Расследование утечки памяти

Я исследую память приложения, работающего на 32-битной Win 7, созданной в смешанном режиме (VC++ и C#.net).

Я уже прошел следующие шаги, пытаясь проанализировать причину утечки:

  1. включена база данных трассировки стека в GFlags

  2. с помощью UMDH.exe я запустил разницу между двумя снимками, и я вижу, что наибольшее выделение памяти

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

    Он содержит только одну строку без стека вызовов. что меня смущает.

Дальнейший анализ с использованием 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. И здесь я тоже не вижу стек вызовов.

Может ли кто-нибудь помочь мне указать мне направление здесь?

0 ответов

Другие вопросы по тегам