Обнаружение и локализация утечек памяти
От: Alexander Shargin Россия RSDN.ru
Дата: 16.07.01 03:18
Оценка: 61 (6) +1
Статья:
Эдвард Райт. Обнаружение и локализация утечек памяти
Автор(ы): Эдвард Райт

Статья посвящена проблеме, которая постоянно преследует программистов на C/C++, — обнаружению и локализации утечек памяти. Автор демонстрирует применение средств библиотеки времени выполнения (CTR), поставляемой с Visual C++, с помощью которых утечки памяти можно устранить гораздо быстрее и проще, чем методом "пристального взгляда".


Авторы:
Alexander Shargin

Аннотация:
Статья посвящена проблеме, которая постоянно преследует программистов на C/C++, — обнаружению и локализации утечек памяти. Автор демонстрирует применение средств библиотеки времени выполнения (CTR), поставляемой с Visual C++, с помощью которых утечки памяти можно устранить гораздо быстрее и проще, чем методом "пристального взгляда".
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
сторонние утилиты
От: Dmitry V. Romanovich Беларусь  
Дата: 14.12.02 17:58
Оценка:
Существуют неплохие программные продукты для борьбы с утечками памяти, чтения неинициализированной памяти & etc. К примеру Rational Purify Plus, Insure++. Тем, кому необходимо разобраться с большим проектом — рекоммендую.
Статич. объекты???
От: Курилка Россия http://kirya.narod.ru/
Дата: 08.05.02 02:06
Оценка:
С предыдущей темой вроде разобрался, теперь другой вопрос:
как утечки в сабж найти? Как-то нереально, они же живут дольще чем main.
А что делать с статическими библиотеками?
От: Курилка Россия http://kirya.narod.ru/
Дата: 08.05.02 00:21
Оценка:
Я вроде поставил и в библиотеке и в приложении кругом _CRTDBG_MAP_ALLOC, да нифига всё равно не получается строчки получить :(
Можно с этим бороться или нет?
Bounds Checker
От: ADK  
Дата: 21.01.02 19:00
Оценка:
Является ли Bounds Checker заменой подобным методам?
Independent software developer
release MFC i Dll
От: odyssey  
Дата: 12.12.01 00:55
Оценка:
Est nekotoraya dll, pri kompilacii ispolzuyutsia RELEASE versii MFC(shared) i CRT, prichem ispolzovat static MFC ili shared DEBUG MFC nelziya. Mozhno li kakim libo obrazom vkluchit standartnie sredstva obnaruzheniya i lokalizacii utechek pamiati ?
Не локализуется место утечки
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.12.01 18:32
Оценка:
Проект — dll без MFC. Добавляю
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>


в DllMain вставляю
    _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF );


в одной из экспортируемых фуекций выделяю по new , но не освобождаю память, в конце программы получаю:

Detected memory leaks!
Dumping objects ->
e:\program files\microsoft visual studio\vc98\include\crtdbg.h(552) : {171} normal block at 0x010C9008, 50 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD


Как заставить отображаться имя и номер строки места выделения памяти в _моем_ файле?
Dll-ка
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.12.01 01:04
Оценка:
при отладке dll _CrtSetDbgFlag() надо включать в каждую экспортируемую функцию этой dll или только в DllMain()?
Статья и ATL проект
От: Dmitriy M. Reznitskiy Голландия http://www.reznitsky.info/
Дата: 30.08.01 00:49
Оценка:
Снаскоку не получилось.
в stdafx.h:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
В DllMain:
if (dwReason == DLL_PROCESS_ATTACH)
{
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
...
букет ошибок:
Compiling...
StdAfx.cpp
d:\program files\microsoft visual studio\vc98\include\malloc.h(105) : error C2059: syntax error : 'constant'
d:\program files\microsoft visual studio\vc98\include\malloc.h(105) : error C2733: second C linkage of overloaded function '_calloc_dbg' not allowed
d:\program files\microsoft visual studio\vc98\include\malloc.h(105) : see declaration of '_calloc_dbg'
тоже самое для _free_dbg,_malloc_dbg,_realloc_dbg,_expand_dbg,_msize_dbg


Рантайм статик.
Кто что может сказать?
Исправленице
От: Bailif  
Дата: 17.07.01 03:18
Оценка:
Полководца зовут Сунь Тзы — а так всё круто.
Re: Bounds Checker
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 27.01.02 20:24
Оценка:
Однако нет, BC — штука мощная, но довольно тормозная, держать ее включенной постоянно нет никаких сил, а описанные методы не требуют практически никаких ресурсов и при этом _постоянно_ предохраняют (или по крайней мере сигнализируют) от неприятностей с памятью.
Re: release MFC i Dll
От: odyssey  
Дата: 12.12.01 22:33
Оценка:
Dobavlenie — i ispolzovat nuzhno MSVCRT.DLL :(
Re: Статья и ATL проект
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.12.01 20:06
Оценка:
сдвинь
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
в самый конец stdafx.h после всех стандартных инклюдов
Re: Не локализуется место утечки
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.12.01 20:04
Оценка:
ответ здесь — http://www.rsdn.ru/forum/message.asp?mid=16695
Автор: Odi$$ey
Дата: 11.12.01
Re: Dll-ка
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.12.01 18:11
Оценка:
ответ см. здесь — http://www.rsdn.ru/forum/message.asp?mid=16570
Автор: Odi$$ey
Дата: 10.12.01
Re: А что делать с статическими библиотеками?
От: Wasilij  
Дата: 16.06.08 16:57
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Я вроде поставил и в библиотеке и в приложении кругом _CRTDBG_MAP_ALLOC, да нифига всё равно не получается строчки получить

К>Можно с этим бороться или нет?

У меня тоже эта же проблема, пробовал везде задать _CRTDBG_MAP_ALLOC, но имя файла и строку в файле получить не удается.
Помогите пожалуйста, если кто знает в чем здесь дело...
Re[2]: А что делать с статическими библиотеками?
От: Unhandled_Exception Россия  
Дата: 16.06.08 19:49
Оценка:
Здравствуйте, Wasilij, Вы писали:

W>У меня тоже эта же проблема, пробовал везде задать _CRTDBG_MAP_ALLOC, но имя файла и строку в файле получить не удается.

W>Помогите пожалуйста, если кто знает в чем здесь дело...

иногда можно выудить полезную инфу с помощью http://deleaker.com/
Re: А что делать с статическими библиотеками?
От: Wasilij  
Дата: 17.06.08 16:06
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Я вроде поставил и в библиотеке и в приложении кругом _CRTDBG_MAP_ALLOC, да нифига всё равно не получается строчки получить

К>Можно с этим бороться или нет?

Я нашел ответ в книге Джона Роббинсона "Отладка приложений для Microsoft .net и Microsoft Windows", глава 17 — Стандарнтая отладочная библиботека С и управление памятью:

#define _CRTDBG_MAP_ALLOC
#define _CRTDBG_MAP_ALLOC_NEW
#include <stdlib.h>

// все остальные include

#include <crtdbg.h> // этот include последний

#ifdef _DEBUG

#ifndef NEW_INLINE_WORKAROUND

#define NEW_INLINE_WORKAROUND new ( _NORMAL_BLOCK ,    __FILE__ , __LINE__ )
#define new NEW_INLINE_WORKAROUND

#endif // NEW_INLINE_WORKAROUND

#endif // _DEBUG


В таком варианте пишет имя файла и номер строки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.