У меня есть приложение C++ windows, которое утечки памяти за транзакцию. Используя perfmon, я могу видеть увеличение личных байтов с каждой транзакцией, использование памяти является плоской, пока приложение не работает.Как отслеживать утечки памяти с помощью umdh.exe во всех кучах?
После предыдущих ответов на stackoverflow я использовал umdh из средств отладки microsoft для отслеживания утечки памяти. Однако есть еще больше утечек, и результаты umdh не соответствуют моим результатам.
Первый UMDH ли еще сообщает эту утечку, стек трассировки:
+ 36192 (2082056 - 2045864) 251 allocs BackTraceCB
+ 4 ( 251 - 247) BackTraceCB allocations
ntdll!RtlAllocateHeapSlowly+00000041
ntdll!RtlAllocateHeap+00000E9F
MSVCR80!malloc+0000007A
Это не использовать как первый вызов таНос, он не говорит, что это называется. У меня есть сомнения относительно этой утечки, поскольку сообщается как при обработке заявки, так и при ее простаивании. Но я ясно вижу, что память не протекает, когда она простаивает. И утечка памяти, сообщаемая при обработке транзакций, не пропорциональна транзакциям, обрабатываемым как отчеты perfmon.
umhd не показывает никаких других утечек, хотя я знаю, что есть хотя бы еще один не показан. Я просто научился искать в сети, что приложение Windows может иметь несколько куч.
- Не может ли быть, что umhd сообщает только об использовании памяти из одной из этих кучей? например, по умолчанию или crt-кучу?
- Как я могу отслеживать использование памяти в других кучах?
- И как узнать, какие DLL/модули используют другие кучи?
Любые указатели на отслеживание этой проблемы были бы с благодарностью получены, поскольку у меня заканчиваются варианты.
Удалось ли вам показать полную трассировку стека? –
Трассировка стека в вопросе оказалась красной селедкой. Он периодически выделялся и освобождался, чтобы всегда существовать, чтобы присутствовать в дельта-umdh. Утечка оказалась в другой куче. Я не мог найти никаких инструментов, которые работают с конкретными контролируемыми кучами. Я использовал код, чтобы ходить по всем кучам и записывать его в файл. Как только данные указали, что проблема orbix была проблемой, я тестировал каждый вызов orbix на транзакцию, пока не обнаружил утечку памяти. – iain