개요
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 +++