mtrace(3) Library Functions Manual mtrace(3) NUME mtrace, muntrace - urmarire malloc BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include void mtrace(void); void muntrace(void); DESCRIERE Funcia mtrace() instaleaza funcii carlig pentru funciile de alocare a memoriei (malloc(3), realloc(3) memalign(3), free(3)). Aceste funcii carlig inregistreaza informaii de urmarire despre alocarea i eliberarea memoriei. Informaiile de urmarire pot fi utilizate pentru a descoperi scurgerile de memorie i incercarile de a elibera memoria nealocata intr-un program. Funcia muntrace() dezactiveaza funciile carlig instalate de mtrace(), astfel incat informaiile de urmarire nu mai sunt inregistrate pentru funciile de alocare a memoriei. In cazul in care nicio funcie de carlig nu a fost instalata cu succes de mtrace(), muntrace() nu face nimic. Atunci cand este apelata mtrace(), aceasta verifica valoarea variabilei de mediu MALLOC_TRACE, care ar trebui sa conina numele rutei unui fiier in care urmeaza sa fie inregistrate informaiile de urmarire. In cazul in care numele rutei este deschis cu succes, acesta este trunchiat la lungimea zero. Daca MALLOC_TRACE nu este configurat sau daca numele de ruta pe care il specifica nu este valid sau nu poate fi scris, atunci nu sunt instalate funcii de carlig, iar mtrace() nu are niciun efect. In programele set-user-ID i set-group-ID, MALLOC_TRACE este ignorat, iar mtrace() nu are niciun efect. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +------------------------------------+---------------------+-----------+ |Interfaa | Atribut | Valoare | +------------------------------------+---------------------+-----------+ |mtrace(), muntrace() | Sigurana firelor | MT-Unsafe | +------------------------------------+---------------------+-----------+ STANDARDE GNU. NOTE In mod normal, mtrace() este apelata o data la inceputul execuiei unui program, iar muntrace() nu este apelata niciodata. Rezultatul de urmarire produs in urma unui apel la mtrace() este textual, dar nu este conceput pentru a fi citit de oameni. Biblioteca GNU C ofera un script Perl, mtrace(1), care interpreteaza jurnalul de urmarire i produce o ieire care poate fi citita de oameni. Pentru cele mai bune rezultate, programul urmarit trebuie compilat cu depanarea activata, astfel incat informaiile privind numerele de linie sa fie inregistrate in executabil. Urmarirea efectuata de mtrace() implica o penalizare de performana (daca MALLOC_TRACE indica un nume de ruta valid i inscriptibil). ERORI Informaia privind numarul de linie produsa de mtrace(1) nu este intotdeauna precisa: referinele la numarul de linie se pot referi la linia anterioara sau urmatoare (fara spaii libere) din codul sursa. EXEMPLE Sesiunea shell de mai jos demonstreaza utilizarea funciei mtrace() i a comenzii mtrace(1) intr-un program care are pierderi de memorie in doua locaii diferite. Demonstraia utilizeaza urmatorul program: $ cat t_mtrace.c #include #include #include int main(void) { mtrace(); for (unsigned int j = 0; j < 2; j++) malloc(100); /* Nu a fost eliberata niciodata - o scurgere de memorie */ calloc(16, 16); /* Nu a fost eliberata niciodata - o scurgere de memorie */ exit(EXIT_SUCCESS); } Cand rulam programul dupa cum urmeaza, observam ca mtrace() a diagnosticat pierderi de memorie in doua locaii diferite din program: $ cc -g t_mtrace.c -o t_mtrace $ export MALLOC_TRACE=/tmp/t $ ./t_mtrace $ mtrace ./t_mtrace $MALLOC_TRACE Memorie neeliberata: ----------------- Adresa Dimens Apelant 0x084c9378 0x64 la /home/cecilia/t_mtrace.c:12 0x084c93e0 0x64 la /home/cecilia/t_mtrace.c:12 0x084c9448 0x100 la /home/cecilia/t_mtrace.c:16 Primele doua mesaje despre memoria neliberata corespund celor doua apeluri malloc(3) din interiorul buclei for. Ultimul mesaj corespunde apelului la calloc(3) (care, la randul sau, apeleaza malloc(3)). CONSULTAI I mtrace(1), malloc(3), malloc_hook(3), mcheck(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 mtrace(3)