개요

Strace는 리눅스에서 프로세스의 시스템콜과 시그널을 추적하기 위한 디버깅 툴이다. 한 프로세스가 어떤 시스템콜을 사용하는지, 어떤 부분에서 병목현상이 일어나는지 아니면 어떠한 오류로 프로세스가 죽는지 탐지하고 디버깅할 수 있다.

옵션

-s: 출력시킬 최대 길이를 설정한다. (하나의 시스템콜의 인자가 너무 길경우 잘리는 문제가 생길 수도 있는데, 그 길이의 Max를 정한다.)
-f: 자식 프로세스를 추적한다.
-t: 타임 스탬프를 찍는다.
-p: 추적할 프로세스의 pid를 받는다. 이 옵션은 기존에 돌아가던 프로세스에 strace를 attach할 수 있게 한다.
-c: 추적 결과에 대한 통계를 낸다.

사용 예

➜ strace -f -t ./prog_1 
04:13:59 execve("./prog_1", ["./prog_1"], 0x7ffea293b0d0 /* 33 vars */) = 0
04:13:59 arch_prctl(0x3001 /* ARCH_??? */, 0x7ffd38c95770) = -1 EINVAL (Invalid argument)
04:13:59 brk(NULL)                      = 0xb2f000
04:13:59 brk(0xb301c0)                  = 0xb301c0
04:13:59 arch_prctl(ARCH_SET_FS, 0xb2f880) = 0
04:13:59 uname({sysname="Linux", nodename="libra13", ...}) = 0
04:13:59 readlink("/proc/self/exe", "/home/ahn9807/AOS/build/mnt/prog"..., 4096) = 34
04:13:59 brk(0xb511c0)                  = 0xb511c0
04:13:59 brk(0xb52000)                  = 0xb52000
04:13:59 mprotect(0x4bd000, 12288, PROT_READ) = 0
04:13:59 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x1), ...}) = 0
04:13:59 write(1, "Hello!", 6Hello!)          = 6
04:13:59 exit_group(0)                  = ?
04:13:59 +++ exited with 0 +++