본문 바로가기
Linux/Command

Strace : debugging tool 시스템 콜/시그널 추적

by neohtux 2016. 9. 11.
728x90

□ strace

 

 - strace는 시스템 콜과 시그널을 추적할 수 있는 일종의 디버깅 툴이다.

 

 만약 프로그램이 지속적인 충돌을 일으키거나, 예상치 못한 동작을 하게되는 경우에도 유용하게 쓰일 수 있다

 

 예를 들면 존재하지 않는 파일을 접근하여 열거나 읽으려할때  strace를 사용하여 문제가 되는 지점을 찾을 수 있다.

 

 

 GNU Debugger(gdb) 와 같은 코드 디버깅같은 세부사항들에 대해서 찾기에는 부적합 할 수 있으나

 

 시스템 콜을 추적하는 툴에있어선 strace가 적합하다. 그리고 코드 디버깅 툴 보다 사용하기가 쉽다.

 

 여기에 몇가지 예를 적고 자세한 사항은 man 페이지를 활용하면 될 것 같다.

 

 

 

 각 라인을 잘보면 메모리에 맵핑 시키는것부터 파일을 열고 읽고 쓰고 닫고 하는데 있어 특정 구조체를 호출하거나 하는 것들에 대해 볼 수있다.

 

 기본 디폴트 에선 실행되는 시스템콜 전부를 보여주지만 ,

 

 

 

-e옵션을 사용하여 특정 시스템 콜만 확인 할 수도있다.

 

 아래 사진은 -e옵션을 사용하여 특정 시스템 콜을 확인한것이다.

 

 

 

test파일(임의로 만든)에서 open 이라는 시스템콜만을 보여 준다.

 

만약 한가지 시스템콜이 아닌 여러가지를 사용하고싶으면 "-e trace=" 를 사용하면된다.

 

ex) strace -e trace=open,read test

ex) strace -e trace=open,read,mmap,access, ls /home

 

 

 

그리고 -o 옵션을 통하여 gcc -o 처럼 strace내역을 파일로 저장하여 결과를 확인 할 수도있다.

 

ex) strace -o strace output.txt test  <- test의 파일의 시스템콜 내역을 output.txt라는 파일에 적어 저장.

 

아래 그림은 위 명령어의 결과를 vi를 통해 확인한 파일이다.

 

 

 

시스템콜 통계 내역을 보여주는 명령어 strace -c

 

 

 

그리고 이미 실행중인 프로그램에 대해서도 가능하다

 

만약 linux 설치하면 보통 설치되어있는 firefox 프로그램에대해 strace를 통하여 확인한다면,

 

우선 firefox의 PID 번호를 확인 후 sudo strace -p 프로세스번호 를 통하여 확인할 수 있다.(관리자 권한필요)

 

ex) ps -C firefox 명령어를 통해 PID가 1101이라면,

ex) sudo strace -p 1101

ex) sudo strace -p 1101 -o excute.txt <- 실행중인 firefox 시스템콜을 excute.txt파일에 저장한다.

 

 

다양한 기능들에 대해선 man페이지를 찾아보면 도움이 될 것 같다.

 

 

 

 

300x250

'Linux > Command' 카테고리의 다른 글

Ctags를 이용한 소스분석  (0) 2016.09.25

댓글