Man page - mtrace(3)

Packages contains this manual

Available languages:

en fr ru ro

Manual

mtrace

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
АТРИБУТЫ
СТАНДАРТЫ
ПРИМЕЧАНИЯ
ОШИБКИ
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

mtrace, muntrace - трассировка malloc

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#include <mcheck.h>

void mtrace(void);
void muntrace(void);

ОПИСАНИЕ

Функция mtrace () устанавливает перехватывающие функции (hook functions) на функции выделения памяти ( malloc (3), realloc (3), memalign (3), free (3)). Эти перехватывающие функции записывают трассировочную информация о выделении и освобождении памяти. Информация о трассировке может использоваться в программе для обнаружения утечек памяти и попыток освобождения не выделенной памяти.

Функция muntrace () отключает перехватывающие функции, установленные mtrace () и трассировка функций выделения памяти больше не выполняется. Если mtrace () не установила перехватывающие функции, то muntrace () ничего не делает.

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

Если MALLOC_TRACE не существует или указанный путь некорректен или недоступен для записи, то перехватывающие функции не устанавливаются и mtrace () ничего не делает. Для программ с установленными set-user-ID и set-group-ID переменная MALLOC_TRACE игнорируется и mtrace () ничего не делает.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes (7).

Image grohtml-624683-1.png

СТАНДАРТЫ

GNU.

ПРИМЕЧАНИЯ

В обычной работе mtrace () вызывается один раз в начале выполнения программы, а muntrace () никогда не вызывается.

Результат трассировки после вызова mtrace () имеет текстовый формат, не предназначенный для чтения человеком. В библиотеке GNU C есть сценарий Perl, mtrace (1), который преобразует журнал трассировки в читаемый вид. Для лучших результатов трассируемая программа должна быть скомпилирована с включённой отладкой для того, чтобы в исполняемый файл попала информация c номерами строк.

Трассировка, выполняемая mtrace (), ухудшает производительность (если MALLOC_TRACE указывает на корректный, доступный на запись файл).

ОШИБКИ

Информация о номере строки, выдаваемая в mtrace (1), не всегда точна: номер строки может ссылаться на предыдущую или следующую (не пустую) строку исходного кода.

ПРИМЕРЫ

Далее представлен пример работы функции mtrace () и команды mtrace (1) для программы с утечкой памяти в двух местах. Для демонстрации используется следующая программа:

$ cat t_mtrace.c
#include <mcheck.h>
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
mtrace();
for (unsigned int j = 0; j < 2; j++)
malloc(100); /* Never freed--a memory leak */
calloc(16, 16); /* Never freed--a memory leak */
exit(EXIT_SUCCESS);
}

При выполнении этой программы мы видим, что mtrace () обнаружила утечку памяти в двух местах программы:

$ cc -g t_mtrace.c -o t_mtrace
$ export MALLOC_TRACE=/tmp/t
$ ./t_mtrace
$ mtrace ./t_mtrace $MALLOC_TRACE
Memory not freed:
-----------------
Address Size Caller
0x084c9378 0x64 at /home/cecilia/t_mtrace.c:12
0x084c93e0 0x64 at /home/cecilia/t_mtrace.c:12
0x084c9448 0x100 at /home/cecilia/t_mtrace.c:16

Первые два сообщения о не освобожденной памяти относятся к двум вызовам malloc (3), сделанным внутри цикла for . Заключительное сообщение относится к вызову calloc (3) (которая, в свою очередь, вызывает malloc (3)).

СМОТРИТЕ ТАКЖЕ

mtrace (1), malloc (3), malloc_hook (3), mcheck (3)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) aereiae <aereiae@gmail.com>, Alexey <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com>, Малянов Евгений Викторович <maljanow@outlook.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .