Backend/OS★

ltrace / strace

petitCoding 2011. 5. 26. 11:48



1. ltrace : 라이브러리 호출을 추적하여 주는 유틸리티이다.

 

[whitelka]# ltrace ./main
__libc_start_main(0x80484dc, 1, 0xbffffb14, 0x8048548, 0x804859c <unfinished ...>
__monstartup(0x80483f4, 0x804864e, 0x177ff8e, 0xbffffac0, 0x9ba4f8) = 0
__cxa_atexit(0x80483a4, 0, 0, 0x8049748, 0xbffffa48) = 0
mcount(0, 0x9b9c80, 0xbffffae8, 0x9d1e33, 1)     = 0xbffffb1c
malloc(12)                                       = 0x804a4c8
printf("%s\n", NULL(null)
)                             = 7
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++

 

참조 : http://linux.die.net/man/1/ltrace

 

2. strace : 사용하는 시스템 콜 및 시그널을 추적하여 주는 유틸리티이다. 각 시스템콜의 이름, 인자, 반환값들은 표준에러출력(stderr)으로 출력되거나 -o 옵션에 의해 명시된 파일로 출력될 수 있다.

 

[root@WIM valgrind]# strace ./main
execve("./main", ["./main"], [/* 23 vars */]) = 0
uname({sys="Linux", node="WIM", ...})   = 0
brk(0)                                  = 0x804a000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=34379, ...}) = 0
old_mmap(NULL, 34379, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7ff7000
close(3)                                = 0
open("/lib/tls/libc.so.6", O_RDONLY)    = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 \37\235"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1512400, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7ff6000
old_mmap(0x9bd000, 1207532, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x9bd000
old_mmap(0xade000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x120000) = 0xade000
old_mmap(0xae2000, 7404, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xae2000
close(3)                                = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7ff5000
mprotect(0xade000, 8192, PROT_READ)     = 0
mprotect(0x9b9000, 4096, PROT_READ)     = 0
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7ff56c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
munmap(0xb7ff7000, 34379)               = 0
brk(0)                                  = 0x804a000
brk(0x806b000)                          = 0x806b000
rt_sigaction(SIGPROF, {0xa84650, ~[], SA_RESTART}, {SIG_DFL}, 8) = 0
setitimer(ITIMER_PROF, {it_interval={0, 1}, it_value={0, 1}}, {it_interval={0, 0}, it_value={0, 0}}) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fff000
write(1, "(null)\n", 7(null)
)                 = 7
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV (core dumped) +++

 

참조 : http://linux.die.net/man/1/strace


반응형

'Backend > OS★' 카테고리의 다른 글

유용한 리눅스 명령어들.  (0) 2011.05.27
리눅스 커널 컴파일  (0) 2011.05.27
시그널 (Signal)  (0) 2011.05.26
inode (index node)  (0) 2011.05.26
Task Scheduling  (0) 2011.05.26