강좌 & 팁
strace는 리눅스 프로그램 디버깅시 사용 할 수 있는 유용한 툴 중 하나 이다.
strace에 대하여 간략히 살펴 보자.
man 페이지를 살펴 보면 strace의 정의는 다음과 같이 "trace system calls and signals( 시스템 콜과 시그널의 추적)" 되어 있다.
쉽에 이야기 하면, 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 -D [-e expr] ... [-O overhead] [-S sortby] [-E var=val] ...
[command [arg ...]]
어떤 shared library가 사용되는지 알수 있으며, 어떤 파일을 열다가 실패하는지, 그리고, process가 잠시 멈출때, 어떤것을 대기하고 있는지. 전송되고 들어오는 내용은 무엇인지 , 어떤 signal을 받는지, ipc 객체들은 어떤것들이 이용되는지 등등에 대한 정보를 파악 할 수 있습니다.
간단히 strace ls 를 수행 시켜 보면 다음과 같이 출력 됩니다.
ls 명령어를 수행 하였을 경우 호출되는 시스템 콜 및 파일 오픈 및 close 그리고 어떤 파일 에 접근 하는지 어떻게 동작 되고 있는지를 파악 할 수 있습니다.