##### 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 |