리눅스상에서 작동하는 C 코드들은 모두 시스템콜(:12)을 주어진 임무를 수행한다. 그러므로 프로그램의 시스템콜이 호출되는 것을 추적할 수 있다면, 프로그램을 디버깅하거나 제대로 작동되는지에 대한 중요한 정보를 얻을 수 있을 것이다.
strace에 대해서
strace는 프로그램이 실행될동안 호출하는 시스템콜을 추적할 수 있는 툴 이다. 여기에 더불어 프로세스가 받은 signal에 대한 정보도 얻을 수 있다. strace를 이용하는 가장 간단한 경우는 strace 다음에 실행시킬 프로그램을 명시하는 것으로, 그러면 프로그램이 종료될때까지의 시스템콜 혹은 시그널 정보를 얻을 수 있게 된다.
strace의 사용방법은 다음과 같다.
Contents
strace
strace에 대해서
$ strace usage: strace [-dffhiqrtttTvVxx] [-a column] [-e expr] ... [-o file] [-p pid] ... [-s strsize] [-u username] [-E var=val] ... [command [arg ...]] or: strace -c [-e expr] ... [-O overhead] [-S sortby] [-E var=val] ... [command [arg ...]]시스템콜 추적하기
#include <stdio.h> int main(int argc, char **argv) { return 0; }$ strace ./mytest2 execve("./mytest2", ["./mytest2"], [/* 47 vars */]) = 0 brk(0) = 0x804a000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f9c000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/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\260a\1"..., 512) = 512 .... .... fstat64(3, {st_mode=S_IFREG|0644, st_size=1339816, ...}) = 0 mmap2(NULL, 1349136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e3c000 mmap2(0xb7f83000, 9744, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f83000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e3b000 mprotect(0xb7f80000, 4096, PROT_READ) = 0 munmap(0xb7f86000, 89519) = 0 exit_group(0) = ? Process 22425 detachedexecve("./mytest2", ["./mytest2"], [/* 47 vars */]) = 0시그널 추적및 보고서만들기
#include <stdio.h> int main() { int i; for(i=0;i>=0;i++) { printf("infinity\n"); } return 0; }시스템콜 통계
실행 중인 프로세스 추적하기
- 데몬이 멈췄다. 어느 지점에서 멈췄는지 확인할 수 있다.
- 클라이언트가 연결을 하지 못한다. 클라이언트는 connect(2)함수를 호출했는지, 서버는 accept(2)함수가 제대로 호출 되었는지 확인할 수 있다.
호출한 시스템 콜에 대한 호출빈도, 에러, CPU 타임 정보를 확인할 수도 있다. Ctrl+C를 누르면 레포팅된다.마치며
Recent Posts
Archive Posts
Tags