##### strace

프로그램이 실행되는 동안 수행되는 시스템콜을 추적하는 도구

디버깅 초기에 문제를 확인하거나 메모리 문제 같은 운영체제 관련 문제를 추적할 때 사용


$ strace -help

usage: strace [-CdffhiqrtttTvVxxy] [-I n] [-e expr]...

              [-a column] [-o file] [-s strsize] [-P path]...

              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]

   or: strace -c[df] [-I n] [-e expr]... [-O overhead] [-S sortby]

              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]


-f : 자식프로세스도 추적

-tt / -T : 타임 스탬프 표시 / 실지 함수호출 시간 표시

-v : 상세 출력 모드

-p PID : 이미 실행중인 프로세스 추적

-o 파일명 : 추적 결과 파일에 저장

-e trace=### : ###에 해당되는 내용 출력

ex) -e trace=open



$ strace /bin/pwd

시스템콜 이름, 매개변수, 반환값





$ sudo strace -p $(pgrep ssh)        // ssh 포트그룹을 식별하여 ssh 프로세스의 시스템 콜 확인


> select 함수에서 waiting


> 다른 곳에서 ssh를 통해 접속


> accept 함수로 떨어지면서 정상정으로 ssh 접속 수행




$ sudo strace -e trace=process -p $(pgrep ssh)      // ssh 동작 중 프로세스 관련 시스템 콜 부분만 뽑아 보기


> 프로세스가 수행되는 중인 정보만 나옴


> ssh 접속


> clone 시스템 콜이 동작하여 프로세스가 생성됨


> $ exit 명령을 사용하여 ssh 접속 종료


> ssh 접속 종료후의 프로세스 관련 내용 출력





##### ltrace 

프로그램이 실행되는 동안 호출되는 동적(공유) 라이브러리 함수를 추적하는 도구

strace와 유사

동적 라이브러리만 추적하므로 파악하기는 쉽지만, 문제의 원인을 찾기가 어려움


-u username : username의 권한으로 명령 실행하면서 라이브러리 추적 (관리자 권한 필요)

-tt / -T : 타임 스탬프 표시 / 실지 함수호출 시간 표시

-v : 상세 출력 모드

-p PID : 이미 실행중인 프로세스 추적

-o 파일명 : 추적 결과 파일에 저장

-e {[+|-][라이브러리 함수명][라이브러리 파일명]} : 해당 내용만 출력



$ ltrace cat /etc/passwd


> 함수들과 인수들의 값을 동적으로 확인



$ sudo ltrace -e malloc+free+select -p $(pgrep ssh)        // ssh 동작 중 -e 옵션으로 malloc+free+select 부분만 출력



> ssh 접속이 되면 해당 부분만 출력


> ssh 접속 종료에도 해당 정보만 출력



 

'System > Linux OS ' 카테고리의 다른 글

리눅스 환경변수와 UID, PID, 시스템자원의 제한  (0) 2015.12.24
lsof  (0) 2015.12.24
gcc / gdb  (0) 2015.12.24
man  (0) 2015.12.24
리눅스 커널 커밋(commit)하기 - ing  (0) 2015.12.23

+ Recent posts