Книга: Программирование для Linux. Профессиональный подход
А.2.4. Библиотека ccmalloc
А.2.4. Библиотека ccmalloc
Библиотека ccmalloc
замещает функции malloc()
и free()
кодом трассировки. Если программа завершается успешно, создается отчет о потерянных блоках памяти и прочих ошибках. Библиотеку ccmalloc
написал Армин Бир (Armin Biere).
Код библиотеки требуется загрузить и инсталлировать самостоятельно. Дистрибутив можно найти по адресу http://www.inf.ethz.ch/personal/biere/projects/ccmalloc
. Распакуйте дистрибутив и запустите сценарий configure. Далее выполните команды make
и make install
, скопируйте файл ccmalloc.cfg
в каталог, из которого будет запускаться проверяемая программа, и переименуйте копию в .ccmalloc
.
К объектным файлам программы необходимо подключить библиотеку ccmalloc
и библиотеку функций динамической компоновки, Вот как это делается:
% gcc -g -Wall -pedantic malloc-use.o -о ccmalloc-use -lccmalloc -ldl
Запустите программу, чтобы получить отчет. Например, если попросить программу malloc-use
выделить память и забыть ее освободить, будут выданы следующие результаты:
% ./ccmalloc-use 12
file-name=a.out does not contain valid symbols
trying to find executable in current directory ...
using symbols from 'ccmalloc-use'
(to speed up this search specify 'file ccmalloc-use'
in the startup file '.ccmalloc')
Please enter a command: a 0 12
Please enter a command: q
.-----------------.
| ccmalloc report |
=====================================================
| total # of | allocated | deallocated | garbage |
+-------------+-----------+-------------+------------+
| bytes | 60 | 48 | 12 |
+-------------+-----------+-------------+------------+
| allocations | 2 | 1 | 1 |
+----------------------------------------------------+
| number of checks: 1 |
| number of counts: 3 |
| retrieving function names for addresses ... done. |
| reading file info from gdb ... done. |
| sorting by number of not reclaimed bytes ... done. |
| number of call chains: 1 |
| number of ignored call chains: 0 |
| number of reported call chains: 1 |
| number of internal call chains: 1 |
| number of library call chains: 0 |
=====================================================
|
*100.0% = 12 Bytes of garbage allocated in 1 allocation
| |
| | 0x400389cb in <???>
| |
| | 0x08045198 in <main>
| | at malloc-use.с:89
| |
| | 0x06048fdc in <allocate>
| | at malloc-use.c:30
| |
| '-----> 0x08049647 in <malloc>
| at src/wrapper.c:284
'------------------------------------------------------
В последних нескольких строках показана цепочка вызовов функций, в которых была выделена, но не освобождена память.
Если необходимо, чтобы библиотека ccmalloc
отслеживала операции записи в память вне выделенной области, придется модифицировать файл .ccmalloc
. расположенный в текущем каталоге. Этот файл проверяется при запуске программы.
- А.2.1. Программа для тестирования динамической памяти
- А.2.2. Проверка функции malloc()
- А.2.3. Поиск потерянных блоков памяти с помощью утилиты mtrace
- А.2.4. Библиотека ccmalloc
- А.2.5. Библиотека Electric Fence
- А.2.6. Выбор средств отладки
- А.2.7. Исходный текст программы, работающей с динамической памятью
- А.2. Поиск ошибок в динамической памяти
- 15.5.2.5. Другие отладчики malloc
- Часть II - Библиотека подпрограмм
- Глава 13. Камера и библиотека фотографий
- А.2.5. Библиотека Electric Fence
- Библиотека libxslt
- 17.2.1. Библиотека setup.rb
- 15.2.1. Стандартная библиотека rss
- Библиотека Ext Core
- 13.2. Локали и библиотека С
- 15.5.1. Библиотека dbug — усовершенствованный printf()
- Клиентская библиотека Firebird