7.2.2. Использование mtrace() для отслеживания распределений памяти

7.2.2. Использование mtrace() для отслеживания распределений памяти

Один из простых способов нахождения всех утечек памяти в программе предусматривает регистрацию всех вызовов malloc() и free(). По окончании программы очень легко сопоставить блоки, распределенные через malloc(), с точками, где они были освобождены с помощью free() или сообщить об ошибке, если для какого-то блока free() не вызывалась.

В отличие от mcheck(), в mtrace() нет соответствующей библиотеки для компоновки. Это не проблема, поскольку трассировку можно осуществлять в gdb. Однако для включения трассировки с помощью mtrace() должна быть установлена переменная окружения MALLOC_TRACE в допустимое имя файла; это может быть либо имя существующего файла, в который процесс может вести запись, либо имя нового файла, который процесс создаст и будет в него записывать.

$ MALLOC_TRACE=mtrace.log gdb broken

...

(gdb) breakmain

Breakpoint 1 at 0x80483f4: filebroken.c, line 14.

(gdb) command 1

Type commands for when Breakpoint 1 is hit, one per line.

End with a line saying just "end".

>call mtrace()

>continue

>end

(gdb) run

Starting program: /usr/src/lad/code/broken

Breakpoint 1, main() at broken.с:47

47 return broken();

$1 = 0

1: 12345

2: 12345678

3: 12345678

4: 12345

5: 12345

6: 12345

7: 12345

Program exited normally.

Программа завершена нормально.

 (gdb) quit

$ ls -l mtrace.log

-rw-rw-r-- 1 ewt ewt 220 Dec 27 23:41 mtrace.log

$ mtrace ./broken mtrace.log

Memory not freed:

He освобождена память:

----------------------

   Address   Size Caller

     Адрес Размер Место вызова

0x09211378    0x5 at /usr/src/lad/code/broken.с:20

Обратите внимание, что программа mtrace точно обнаружила утечку памяти. Также она может найти факт освобождения с помощью free() памяти, которая ранее не распределялась, если этот факт будет зафиксирован в журнальном файле, но на практике так не происходит, поскольку в этом случае программа немедленно аварийно завершается.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

1.5.3 Распределение памяти

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

1.5.3 Распределение памяти Ядро постоянно располагается в оперативной памяти, наряду с выполняющимся в данный момент процессом (или частью его, по меньшей мере). В процессе компиляции программа-компилятор генерирует последовательность адресов, являющихся адресами


18.6.4 Использование прямого доступа к памяти

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

18.6.4 Использование прямого доступа к памяти Windows 95 OSR2 и более поздние версии обладают возможностью использования прямого доступа к памяти (Direct Memory Access - DMA) при обращении к IDE-дискам. Однако эта опция не часто используется по умолчанию, хотя ее применение в виртуальном


О Подсистема памяти

Из книги Основы AS/400 автора Солтис Фрэнк

О Подсистема памяти Одна из самых больших проблем любого процессора — обеспечение его загрузки. За последние несколько лет производительность процессоров необычайно выросла, в среднем удваиваясь каждые два года. Производительность памяти и ввода-вывода не успевает


Организация памяти

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Организация памяти Давайте проведем краткий обзор организаций памяти для многопроцессорных систем. Нас интересуют три схемы организации памяти: централизованная разделяемая память, распределенная память и распределенная разделяемая память.Машина с


Повторное использование памяти в трех режимах

Из книги MySQL: руководство профессионала автора Паутов Алексей В

Повторное использование памяти в трех режимах Для объектов, созданных как в основанном на стеке режиме, так и в динамическом режиме, возникает вопрос, что делать с неиспользуемыми объектами? Возможно ли память, занятую таким объектом, повторно использовать в более


2.8. Тип памяти CSV

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.


Эй, как насчет отслеживания изменений?

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Эй, как насчет отслеживания изменений? Лучший вариант отслеживания изменений, который я могу предложить при данном подходе - это делать фотографию доски задач каждый день. Делайте так, если это необходимо. Я тоже иногда так делаю, хотя ещё никогда не возникало


МОДЕЛИ ПАМЯТИ

Из книги Цифровой журнал «Компьютерра» № 204 автора Журнал «Компьютерра»

МОДЕЛИ ПАМЯТИ Реализация моделей памяти в СП MSC и в СП ТС имеет ряд отличий. В разделах 8.1 и 8.2 описаны модели памяти СП MSC, а в разделе 8.3 приведены отличия моделей памяти СП


Модели памяти СП ТС

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Модели памяти СП ТС Организация работы с моделями памяти в СП ТС имеет ряд отличий от СП MSC.В дополнение к описанным выше моделям СП ТС имеет еще одну — tiny (минимальную). В этой модели вся программа — код, данные, стек, динамическая память — размещается в одном сегменте.


Клиент отслеживания изменившихся связей

Из книги Разработка ядра Linux автора Лав Роберт

Клиент отслеживания изменившихся связей Служба предназначена для автоматического отслеживания связей (например, связей «ярлык—приложение») при перемещении объектов в пределах файловой системы компьютера или домена. Эта служба, например, реализует возможность


У «Почты России» появилось мобильное приложение для отслеживания посылок и подачи жалоб Николай Маслухин

Из книги автора

У «Почты России» появилось мобильное приложение для отслеживания посылок и подачи жалоб Николай Маслухин Опубликовано 16 декабря 2013 В пятницу 13-го «Почта России» объявила о запуске одноименного мобильного приложения для отслеживания посылок. В


7.4.3. Использование памяти

Из книги автора

7.4.3. Использование памяти Файл /proc/meminfo хранит сведения об использовании системной памяти. Указываются данные как о физической памяти, так и об области подкачки. Во второй и третьей строках значения даны в байтах, в остальных строках — в килобайтах. Приведем пример:% cat


Страницы памяти

Из книги автора

Страницы памяти Ядро рассматривает страницы физической памяти как основные единицы управления памятью. Хотя наименьшая единица памяти, которую может адресовать процессор, — это машинное слово, модуль управления памятью (MMU, Memory Management Unit) — аппаратное устройство,