Provided by: manpages-ru-dev_4.27.0-1_all bug

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

       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).
       ┌────────────────────────────────────────────────────────────────────┬──────────────────────┬───────────┐
       │ ИнтерфейсАтрибутЗначение  │
       ├────────────────────────────────────────────────────────────────────┼──────────────────────┼───────────┤
       │ mtrace(), muntrace()                                               │ Безвредность в нитях │ MT-Unsafe │
       └────────────────────────────────────────────────────────────────────┴──────────────────────┴───────────┘

СТАНДАРТЫ

       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 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                        mtrace(3)