□ 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페이지를 찾아보면 도움이 될 것 같다.
'Linux > Command' 카테고리의 다른 글
Ctags를 이용한 소스분석 (0) | 2016.09.25 |
---|
댓글