mtrace(3) - wariua/manpages-ko GitHub Wiki

NAME

mtrace, muntrace - malloc 좔적

SYNOPSIS

#include <mcheck.h>

void mtrace(void);

void muntrace(void);

DESCRIPTION

mtrace() ν•¨μˆ˜λŠ” λ©”λͺ¨λ¦¬ ν• λ‹Ή ν•¨μˆ˜λ“€(malloc(3), realloc(3), memalign(3), free(3))에 ν›… ν•¨μˆ˜λ₯Ό μ„€μΉ˜ν•œλ‹€. κ·Έ ν›… ν•¨μˆ˜λ“€μ—μ„œλŠ” λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œμ— λŒ€ν•œ 좔적 정보λ₯Ό κΈ°λ‘ν•œλ‹€. κ·Έ 좔적 정보λ₯Ό μ΄μš©ν•΄ ν”„λ‘œκ·Έλž¨ λ‚΄μ˜ λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ λΉ„ν• λ‹Ή λ©”λͺ¨λ¦¬ ν•΄μ œ μ‹œλ„λ₯Ό μ°Ύμ•„λ‚Ό 수 μžˆλ‹€.

muntrace() ν•¨μˆ˜λŠ” mtrace()둜 μ„€μΉ˜ν•œ ν›… ν•¨μˆ˜λ“€μ„ λΉ„ν™œμ„±ν™”ν•΄μ„œ λ©”λͺ¨λ¦¬ ν• λ‹Ή ν•¨μˆ˜λ“€μ— λŒ€ν•œ 좔적 정보λ₯Ό 더 이상 κΈ°λ‘ν•˜μ§€ μ•Šκ²Œ ν•œλ‹€. mtrace()둜 μ„€μΉ˜ν–ˆλ˜ ν›… ν•¨μˆ˜κ°€ μ—†μœΌλ©΄ muntrace()λŠ” 아무것도 ν•˜μ§€ μ•ŠλŠ”λ‹€.

mtrace()λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν™˜κ²½ λ³€μˆ˜ MALLOC_TRACE의 값을 ν™•μΈν•˜λŠ”λ°, 좔적 정보λ₯Ό 기둝할 파일의 경둜λͺ…을 λ‹΄κ³  μžˆμ–΄μ•Ό ν•œλ‹€. κ·Έ 경둜λͺ…이 μ„±κ³΅μ μœΌλ‘œ 열리면 νŒŒμΌμ„ 길이 0으둜 μž˜λΌλ‚Έλ‹€.

MALLOC_TRACEκ°€ 섀정돼 μžˆμ§€ μ•Šκ±°λ‚˜, μ§€μ •ν•œ 경둜λͺ…이 μœ νš¨ν•˜μ§€ μ•Šκ±°λ‚˜ μ“°κΈ° κ°€λŠ₯ν•˜μ§€ μ•ŠμœΌλ©΄ ν›… ν•¨μˆ˜λ₯Ό μ„€μΉ˜ν•˜μ§€ μ•ŠμœΌλ©° mtrace()κ°€ 아무것도 ν•˜μ§€ μ•ŠλŠ”λ‹€. set-user-ID 및 set-group-ID ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” MALLOC_TRACEλ₯Ό λ¬΄μ‹œν•˜λ©° mtrace()κ°€ 아무것도 ν•˜μ§€ μ•ŠλŠ”λ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
mtrace(), muntrace() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Unsafe

CONFORMING TO

이 ν•¨μˆ˜λ“€μ€ GNU ν™•μž₯이닀.

NOTES

일반적인 μ‚¬μš© λ°©μ‹μ—μ„œλŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œμž‘ λ•Œ mtrace()λ₯Ό ν•œ 번 ν˜ΈμΆœν•˜κ³  muntrace()λŠ” μ „ν˜€ ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ”λ‹€.

mtrace() 호좜 ν›„ λ‚˜μ˜€λŠ” 좔적 좜λ ₯은 ν…μŠ€νŠΈμ§€λ§Œ μ‚¬λžŒμ΄ 읽도둝 λ§Œλ“€μ–΄μ§„ 건 μ•„λ‹ˆλ‹€. GNU C λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” νŽ„ 슀크립트 mtrace(1)κ°€ κ·Έ 좔적 둜그λ₯Ό ν•΄μ„ν•΄μ„œ μ‚¬λžŒμ΄ 읽을 수 μžˆλŠ” 좜λ ₯을 λ‚΄λ†“λŠ”λ‹€. 보기 쒋은 κ²°κ³Όλ₯Ό μœ„ν•΄μ„  좔적 λŒ€μƒ ν”„λ‘œκ·Έλž¨μ„ 컴파일 ν•  λ•Œ 디버깅을 μΌœμ„œ μ‹€ν–‰ νŒŒμΌμ— ν–‰ 번호 정보λ₯Ό κΈ°λ‘ν•˜κ²Œ ν•˜λŠ” 게 μ’‹λ‹€.

mtrace()둜 μˆ˜ν–‰ν•˜λŠ” 좔적은 (MALLOC_TRACEκ°€ μœ νš¨ν•˜κ³  μ“°κΈ° κ°€λŠ₯ν•œ 경둜λͺ…을 가리킨닀면) μ„±λŠ₯ μ €ν•˜λ₯Ό μœ λ°œν•œλ‹€.

BUGS

mtrace(1)κ°€ λ‚΄λ†“λŠ” ν–‰ 번호 정보가 항상 μ •ν™•ν•˜μ§€λŠ” μ•Šλ‹€. ν–‰ λ²ˆν˜Έκ°€ μ†ŒμŠ€ μ½”λ“œμ—μ„œ μ•žμ΄λ‚˜ λ’€μ˜ (λΉ„μ–΄ μžˆμ§€ μ•Šμ€) 행을 가리킬 μˆ˜λ„ μžˆλ‹€.

EXAMPLE

μ•„λž˜μ˜ μ…Έ μ„Έμ…˜μ€ 두 ꡰ데에 λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ μžˆλŠ” ν”„λ‘œκ·Έλž¨μœΌλ‘œ mtrace() ν•¨μˆ˜μ™€ mtrace(1) λͺ…λ Ή μ‚¬μš© 방식을 보여 μ€€λ‹€. λ‹€μŒ ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•œλ‹€.

$ cat t_mtrace.c
#include <mcheck.h>
#include <stdlib.h>
#include <stdio.h>

int
main(int argc, char *argv[])
{
    int j;

    mtrace();

    for (j = 0; j < 2; j++)
        malloc(100);            /* free μ•ˆ 함 - λ©”λͺ¨λ¦¬ λˆ„μˆ˜ */

    calloc(16, 16);             /* free μ•ˆ 함 - λ©”λͺ¨λ¦¬ λˆ„μˆ˜ */
    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

처음 두 λ©”μ‹œμ§€λŠ” for 루프 μ•ˆμ˜ malloc(3) 호좜 두 λ²ˆμ— ν•΄λ‹Ήν•˜λŠ” ν•΄μ œ μ•ˆ 된 λ©”λͺ¨λ¦¬μ— λŒ€ν•œ 것이닀. λ§ˆμ§€λ§‰ λ©”μ‹œμ§€λŠ” calloc(3) 호좜(λ‚΄λΆ€μ—μ„œ λ‹€μ‹œ malloc(3) ν˜ΈμΆœν•¨)에 ν•΄λ‹Ήν•œλ‹€.

SEE ALSO

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


2017-09-15

⚠️ **GitHub.com Fallback** ⚠️