Отловить утечку памяти
От: Аноним  
Дата: 10.11.06 13:01
Оценка:
Есть процесс с одним потоком, в который загружено 50 .dll и адрес, по которому выделена память. Эта память впоследствии не освобождается. Нужно найти место в коде, где и кем эта память выделяется.
Адрес с выделенной памятью не меняется от запуска к запуску. Можно ли как-то на этом сыграть? Например, заблокировать как-то этот адрес, а потом получить исключение при попытке выделить по нему память.

Спасибо!

ЗЫ. Использование счётчика распределений невозможно (от запуска к запуску он меняется), _CrtDumpMemoryLeaks() также не помогает (нет имени файла в дампе, хотя включен _CRTDBG_MAP_ALLOC и переопределён new)
Re: Отловить утечку памяти
От: kan Великобритания  
Дата: 10.11.06 13:06
Оценка:
Аноним wrote:

> ЗЫ. Использование счётчика распределений невозможно (от запуска к

> запуску он меняется), _CrtDumpMemoryLeaks() также не помогает (нет имени
> файла в дампе, хотя включен _CRTDBG_MAP_ALLOC и переопределён new)
_CrtSetBreakAlloc?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Отловить утечку памяти
От: Аноним  
Дата: 10.11.06 13:10
Оценка:
Здравствуйте, kan, Вы писали:

kan>Аноним wrote:


>> ЗЫ. Использование счётчика распределений невозможно (от запуска к

>> запуску он меняется), _CrtDumpMemoryLeaks() также не помогает (нет имени
>> файла в дампе, хотя включен _CRTDBG_MAP_ALLOC и переопределён new)
kan>_CrtSetBreakAlloc?

_CrtSetBreakAlloc используется при имеющем смысл счётчике распределений — не мой случай
Re: Отловить утечку памяти
От: Sergey Россия  
Дата: 10.11.06 13:33
Оценка:
" Аноним " <0@users.rsdn.ru> wrote in message news:2208421@news.rsdn.ru...
> Есть процесс с одним потоком, в который загружено 50 .dll и адрес, по которому выделена память. Эта память впоследствии не освобождается. Нужно найти место в коде, где и кем эта память выделяется.
> Адрес с выделенной памятью не меняется от запуска к запуску. Можно ли как-то на этом сыграть? Например, заблокировать как-то этот адрес, а потом получить исключение при попытке выделить по нему память.
>
> Спасибо!
>
> ЗЫ. Использование счётчика распределений невозможно (от запуска к запуску он меняется), _CrtDumpMemoryLeaks() также не помогает (нет имени файла в дампе, хотя включен _CRTDBG_MAP_ALLOC и переопределён new)

Можно просто воткнуть условную бряку внутри malloc, чтобы срабатывала когда возвращаемое значение равно нужному адресу. Тормозить правда будет сильно.
Posted via RSDN NNTP Server 2.0
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: Отловить утечку памяти
От: Graf Alex Украина http://grafalex.oberon.kiev.ua
Дата: 10.11.06 14:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть процесс с одним потоком, в который загружено 50 .dll и адрес, по которому выделена память. Эта память впоследствии не освобождается. Нужно найти место в коде, где и кем эта память выделяется.

А>Адрес с выделенной памятью не меняется от запуска к запуску. Можно ли как-то на этом сыграть? Например, заблокировать как-то этот адрес, а потом получить исключение при попытке выделить по нему память.

А>Спасибо!


А>ЗЫ. Использование счётчика распределений невозможно (от запуска к запуску он меняется), _CrtDumpMemoryLeaks() также не помогает (нет имени файла в дампе, хотя включен _CRTDBG_MAP_ALLOC и переопределён new)

Кста, а как на счет использования тулов, который предназначены для такого рода вещей?
Например valgrind, purify, bounds checker?
Re: Отловить утечку памяти
От: pjBrain  
Дата: 10.11.06 15:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть процесс с одним потоком, в который загружено 50 .dll и адрес, по которому выделена память. Эта память впоследствии не освобождается. Нужно найти место в коде, где и кем эта память выделяется.

А>Адрес с выделенной памятью не меняется от запуска к запуску. Можно ли как-то на этом сыграть? Например, заблокировать как-то этот адрес, а потом получить исключение при попытке выделить по нему память.

Microsoft Visual Studio позволяет установить breakpoint на адрес памяти, который будет отслеживаться на изменения.
По стеку можно будет узнать откуда используется эта память.
Re[2]: Отловить утечку памяти
От: Аноним  
Дата: 10.11.06 16:02
Оценка:
Здравствуйте, pjBrain, Вы писали:

[]

B>Microsoft Visual Studio позволяет установить breakpoint на адрес памяти, который будет отслеживаться на изменения.

Беда только в том, что этот адрес должен быть реальным (то есть валидным на момент установки breakpoint, под него уже должна быть выделена память), иначе установить breakpoint нельзя (на VS60). Меня же интересует сам момент выделения памяти по этому адресу...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.