Книга: Программирование для Linux. Профессиональный подход

А.2.3. Поиск потерянных блоков памяти с помощью утилиты mtrace

А.2.3. Поиск потерянных блоков памяти с помощью утилиты mtrace

Утилита mtrace позволяет выявить наиболее распространенную ошибку при работе с динамической памятью: несоответствие числа операций выделения и освобождения памяти. Алгоритм применения утилиты таков.

1. Включите в программу файл <mcheck.h> и разместите в самом начале программы вызов функции mtrace(). Эта функция активизирует трассировку операций выделения и освобождения памяти.

2. Задайте имя файла, в котором будет сохраняться трассировочная информация. Это делается следующим образом:

% export MALLOC_TRACE=memory.log

3. Запустите программу. Все операции выделения и освобождения памяти будут зарегистрированы в журнальном файле.

4. Вызовите утилиту mtrace, которая проверит, совпадает ли число выделенных блоков памяти с числом освобожденных блоков.

% mtrace my_program $MALLOC_TRACE

Сообщения, выдаваемые утилитой mtrace, достаточно понятны. Например, в случае программы malloc-use будет получена такая информация:

- 0000000000 Free 3 was never alloc'd malloc-use.с:39
Memory not freed:
-----------------
Address    Size    Caller
0x08049d48  0xc at malloc-use.с:30

Эти сообщения говорят о том, что в строке 39 файла malloc-use.c делается попытка освободить память, которая никогда не была выделена, а память, выделенная в строке 30, так и не была освобождена.

Функция malloc() заставляет программу фиксировать все операции выделения и освобождения памяти в файле, указанном в переменной среды MALLOC_TRACE. Чтобы данные были записаны в файл, программа должна завершиться нормальным образом. Утилита mtrace анализирует этот файл и находит в нем непарные записи.

Оглавление книги


Генерация: 1.582. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз