Книга: Программирование для 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. расположенный в текущем каталоге. Этот файл проверяется при запуске программы.

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


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