Книга: Программирование для 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
анализирует этот файл и находит в нем непарные записи.
- А.2.1. Программа для тестирования динамической памяти
- А.2.2. Проверка функции malloc()
- А.2.3. Поиск потерянных блоков памяти с помощью утилиты mtrace
- А.2.4. Библиотека ccmalloc
- А.2.5. Библиотека Electric Fence
- А.2.6. Выбор средств отладки
- А.2.7. Исходный текст программы, работающей с динамической памятью
- А.2. Поиск ошибок в динамической памяти
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- 3.2.1.2. Начальное выделение памяти: malloc()
- 13.3.4. Поиск и замена текста
- Фильтры и поиск
- 1.3.1. Индексирование сайта в поисковых системах
- Глава 4 Поиск и выбор идеи
- Глава 1 Поиск (Найдется всё!)
- Обработка запросов с помощью PHP
- Нормально ли воспринимается поисковыми системами маскировка партнерских ссылок?