Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Утечка памяти, диагностика программы 
:(
    Опции темы
NightGoblin
  Дата 2.1.2004, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: нет
Всего: 11



Всем привет.

Заранее прошу прощения, если вопрос из разряда RTFM&FAQ, но первого под рукой нет, а во втором ничего даже отдаленно напоминающего не нашлось.

Значит так. Написал на C (без плюсов) кое-какую библиотеку. И теперь охота проверить, нет ли при работе с ней утечек памяти. Вопрос: как это сделать стандартными средствами? Я пробовал через sbrk(), но он выводит разные результаты даже если все было аккуратно удалено, то есть, при любом раскладе после работы с malloc()/free() размер сегмента меняется. Какие есть средства для проверки подобных вещей, желательно по стандарту ANSI и/или POSIX?

Спасибо.


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 2.1.2004, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Поищи BoundsChecker. Сам не пробовал его, но читал, что это одна из лучших прог для проверки утечек памяти.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Waters
Дата 2.1.2004, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.11.2003

Репутация: нет
Всего: нет



PM MAIL   Вверх
NightGoblin
Дата 2.1.2004, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: нет
Всего: 11



<Spawn>, Waters,
Большое спасибо, но это, к сожалению, не то, что нужно. Разработка ведется в UNIX (компилятор GCC) на чистом C, без классов. Есть ли какие-то стандартные средства (или, если есть, библиотека, которая будет работать и в *NIX) для контроля таких вещей?


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
DENNN
Дата 5.1.2004, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Я бы еще попробовал поискать на sourceforge.net
PM ICQ   Вверх
Kefir
Дата 5.1.2004, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



Сам не пользовался, но вроде в RedHat есть что-то навроде Memory Profiler...
PM MAIL WWW Skype   Вверх
Unregistered
Дата 6.1.2004, 14:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Разные есть средства : mtrace, библиотека ccmalloc, библиотека Electric Fence. Все они есть в стандартной поставке.
  Вверх
mr.DUDA
Дата 6.1.2004, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



В крайнем случае, имхо можно взять да и написать самостоятельно парочку макросов, типа:
Код
#define _DEBUG_MEM 1

void * malloc_dbg(size_t size)
{
  // ... какой-то свой код для слежения за размерами выделенной памяти
}

// ....     то же самое для free, realloc, calloc и т.п.

#ifdef _DEBUG_MEM
#define malloc _malloc_dbg
#define free _free_dbg
// ...
#endif

#include ...     // какие-то стандартные библиотеки

или же переопределить new_handler.

ЗЫ, в статье с RSDN.ru как раз описывается такой подход, но с упором на компиляторы под Win-платформу.

Это сообщение отредактировал(а) mr.DUDA - 6.1.2004, 16:09


--------------------
user posted image
PM MAIL WWW   Вверх
Unregistered
Дата 6.1.2004, 20:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Утилита mtrace позволяет выявить наиболее распространенную ошибку при работе с динамической памятью: несоответствие числа операций выделения и освобождения памяти. Алгоритм применения утилиты таков:
1. Включить в программу файл <mcheck.h>. Эта функция активизирует трассировку операций выделения и освобождения памяти.
2. Задать имя файла, в котором будет сохраняться трассировачная информация. Это делается следующим образом :
Код
%export MALLOC_TRACE=memory.log

3. Запустить программу.
4. Вызвать mtrace:
Код
%mtrace my_program $MALLOC_TRACE

  Вверх
NightGoblin
Дата 10.1.2004, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: нет
Всего: 11



Всем огромное спасибо. Думаю, вариант с mtrace или переопределением имен подойдет больше всего.


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0901 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.