성큼성큼 걷다

strace
성큼성큼 걷다
Strace logo.svg
원본 작성자폴 크란넨버그
개발자드미트리 레빈
안정적 해제
5.17[1] / 2022년 3월 26일; 19일(2022-03-26)
리포지토리
기록 위치C[2]
운영 체제리눅스
플랫폼AArch64, DEC Alpha, ARC, ARM EABI/OABI, AVR32, Blackfin, C-SKY, HP PA-RISC, IA-32, IA-64, LoongArch, Motorola 68k, Imagination META, MicroBlaze, MIPS, Nios II, OpenRISC, Power ISA 32/64 bit, RISC-V, System/390/z/Architecture, SuperH 32/64 bit, SPARC 32/64 bit, TILE, TILEPro, TILE-Gx, x86-64, x32 ABI, Xtensa
다음에서 사용 가능영어[주 1]
유형디버깅
면허증LGPL v2.1+[주2][4]
웹사이트strace.io Edit this on Wikidata

Strace리눅스를 위한 진단, 디버깅 및 명령형 사용자공간 유틸리티다.프로세스리눅스 커널 사이의 상호작용을 감시하고 조작하는데 사용되는데, 여기에는 시스템 호출, 신호 전달, 프로세스 상태 변경 등이 포함된다.strace의 조작은 ptrace라고 알려진 커널 특징에 의해 가능하다.

일부 유닉스 유사 시스템은 트러스 같은 스트레이스와 유사한 다른 진단 도구를 제공한다.

역사

스트레이스는 원래 1991년 Paul Kranenburg가 저작권 고시에 따라 SunOS를 위해 쓴 것으로 1992년 초에 comp 3권에 출판되었다.원천태양. 초기 README 파일에는 다음이 포함되었다.[5]

Strace(1)는 Sun 제공 프로그램 추적(1)과 매우 유사한 Sun(tm) 시스템을 위한 시스템 콜 추적기다. Strace(1)는 안타깝게도 Sun 제공 시스템 소프트웨어를 거의 모두 포함하는 출처가 없는 디버그 프로그램의 종류에 유용한 유틸리티다.

후에, 브란코 란케스터는 이 버전을 Linux에 포팅하여 1992년 11월에 그의 버전을 발매하고 1993년에 이어 두 번째 버전을 발매했다.[6][7]리차드 슬래드키는 1993년에 이러한 별도 버전의 스트레이스를 결합하였고,[8] 1994년에 프로그램을 SVR4Solaris에 포팅하여 스트레이스 3.0을 컴프로 발표하였다.source.misc([9]소스.misc).

1996년부터는 위체르트 악커먼에 의해 스트레이스가 유지되었다.그의 재임 기간 동안, Strace 개발은 CVS로 이동했다; FreeBSD로의 포트와 리눅스 상의 많은 아키텍처 (ARM, IA-64, MIPS, PA-RISC, PowerPC, s390, SPARC 포함)가 도입되었다.2002년, 보폭 유지에 대한 부담이 롤랜드 맥그래스로 이전되었다.그 이후, strace는 몇 개의 새로운 Linux 아키텍처 (AMD64, s390x, SuperH)에 대한 지원을 얻었고, 그것들 중 일부에 대한 바이아키텍처 지원을 받았으며, Linux에서 syscall 디코더에 대한 수많은 추가와 개선을 받았다; strace 개발은 그 기간 동안 git로 이동했다.2009년부터는 드미트리 레빈(Drimtry Levin)에 의해 활발하게 유지되고 있다. 스트레이스는 AArch64, ARC, AVR32, 블랙핀, 메타, 니오 II, OpenSISC 1000, RISC-V, 타일/틸레Gx, Xtensa 아키텍처에 대한 지지를 얻었다.

리눅스 운영체제에 대해 일부(확실히 비활성화된)[10] 코드를 가진 마지막 스트레이스는 2011년 3월에 출시된 4.6이었다.[11]2012년 5월에 출시된 Strace 버전 4.7에서는 [12]모든 비-Linux 코드가 제거되었다.[13] 4.13 이후,[14] 프로젝트는 Linux 커널의 출시 일정을 따르고 버전 5.0에서는 Linux의 버전 지정 계획도 따른다.[15]

2012년에는 경로 추적 및 파일 설명자 경로 디코딩에 대한 지원도 얻었다.[16]2014년 8월에는 Strace 4.9가 출시되었으며,[17][18] 스택 추적 인쇄에 대한 지원이 추가되었다.2016년 12월에는 syscall 고장 분사 기능이 구현되었다.[19][20]

버전 이력

버전 출시일자 주목할 만한 변화
5.17 2022년 3월 26일[21] 64비트 LongArch 아키텍처 지원, 확장된 개인 데이터 지정 구문, 새로운 지원 추가set_mempolicy_home_nodeLinux 상의 syscall
5.16 2022년 1월 10일[22] SELinux 컨텍스트 불일치 인쇄 지원 추가(--secontext=mismatch옵션); 새로운 기능에 대한 지원 추가futex_waitvLinux 상의 syscall
5.15 2021년 12월 1일[23] 추가된--decode-pids=comm/-YPID에 대한 명령 이름 인쇄 옵션, 현재 작업 디렉토리 인쇄 구현AT_FDCWD의 사용.--decode-fds=path옵션 사용, 지원 추가process_mreleasesyscall 디코딩, 구현된 디코딩HDIO_*,KD*그리고SECCOMP_*ioctl 명령어
5.14 2021년 9월 2일[24] 새로운 기능에 대한 지원 추가memfd_secret그리고quotactl_fdsyscall 디코딩
5.13 2021년 7월 18일[25] IBM POWER 아키텍처에 시스템 Call Vectored ABI 지원 구현, 새로운 지원 추가landlock_add_rule,landlock_create_ruleset그리고landlock_restrict_selfsyscall 디코딩
5.12 2021년 4월 26일[26] 구현됨--secontext[=full]SELinux 컨텍스트를 표시하는 옵션, 새로운 기능에 대한 지원 추가mount_setattrsyscall 디코딩
5.11 2021년 2월 17일[27] syscall 진입/출구에 데이터를 주입하는 옵션 추가(poke_enter=그리고poke_exit=의 매개 변수--inject옵션); 새로운 기능에 대한 지원 추가epoll_pwait2syscall 디코딩; 에 대한 모방 디코딩FS_IOC_FS[GS]ETXATTR,FS_IOC{,32}_[GS]ETFLAGS,GPIO_*,SIOCADDMULTI,SIOCDELMULTI,SIOCGIFENCAP,SIOCOUTQNSD,SIOCSIFENCAP,SIOCSIFHWBROADCAST,UBI_IOCRPEB,UBI_IOCSPEB,V4L2_BUF_TYPE_META_CAPTURE,V4L2_BUF_TYPE_META_OUTPUT그리고VIDIOC_QUERY_EXT_CTRLioctl 명령어
5.10 2020년 12월 14일[28]
5.9 2020년 9월 24일[29]
5.8 2020년 8월 6일[30]
5.7 2020년 6월 1일[31]
5.6 2020년 4월 7일[32]
5.5 2020년 2월 6일[33]
5.4 2019년 11월 28일[34]
5.3 2019년 9월 25일[35]
5.2 2019년 7월 12일[36]
5.1 2019년 5월 22일[37]
5.0 2019년 3월 19일[38]
4.26 2018년 12월 26일[39]
4.25 2018년 10월 30일[40]
4.24 2018년 8월 14일[41]
4.23 2018년 6월 14일[42]
4.22 2018년 4월 5일[43]
4.21 2018년 2월 13일[44]
4.20 2017년 11월 13일[45]
4.19 2017년 9월 5일[46]
4.18 2017년 7월 5일[47]
4.17 2017년 5월 24일[48]
4.16 2017년 2월 14일[49]
4.15 2016년 12월 14일[50]
4.14 2016년 10월 4일[51]
4.13 2016년 7월 26일[52]
4.12 2016년 5월 31일[53]
4.11 2015년 12월 21일[54]
4.10 2015년 3월 6일[55]
4.9 2014년 8월 15일[56]
4.8 2013년 6월 3일[57]
4.7 2012년 5월 2일[58]
4.6 2011년 3월 15일[59]
4.5.20 2010년 4월 13일 신규 지원 추가inotify_init1,perf_event_open,preadv,pwritev,recvmmsg,rt_tgsigqueueinfoLinux의 syscall;-C정기 출력과 요약 출력을 결합하는 옵션 추가, Linux에서 타일 아키텍처 지원 추가
4.5.19 2009년 10월 21일 유지보수가 드미트리 레빈에게 전달됨; 스트레이스는 추적된 프로그램과 동일한 출구 코드/신호로 종료됨; 새로운 것에 대한 지원을 추가함.accept4,dup3,epoll_create1,eventfd2,inotify_init1,pipe2,signalfd4Linux에서 syscalls, Linux에서 Blackfin, AVR32 및 CRIS 아카이브 지원 추가
4.5.18 2008년 8월 28일 에 대한 지원 추가subpage_protLinux의 POWER별 syscall
4.5.17 2008년 7월 21일 -F다음과 같이 국기는 사용되지 않는다.-f흔적vfork오래전부터 리눅스로
4.5.16 2007년 8월 3일 신규 지원 추가move_pages,utimensat,signalfd,timerfd,eventfd,getcpu,epoll_pwaitLinux 상의 syscalls
4.5.15 2007년 1월 16일 신규 지원 추가*at,inotify*,pselect6,ppoll그리고unshareLinux 상의 syscalls
4.5.14 2007년 1월 16일 시스템 통화 번호 제공 가능-e사양
4.5.13 2005년 8월 3일 추가하다descsyscall 그룹 지원 대상-e trace=
4.5.12 2005년 6월 8일
4.5.11 2005년 3월 22일
4.5.10 2005년 3월 13일
4.5.9 2004년 2월 4일
4.5.8 2004년 10월 19일 디코딩mbind,[sg]et_mempolicy,waitid,fadvise64{,_64}그리고epoll_*syscalls,RTC_*Linux 상의 ioctls
4.5.7 2004년 8월 31일
4.5.6 2004년 7월 12일 Linux에서 64비트 SPARC 아키텍처 지원 추가.
4.5.5 2004년 6월 27일
4.5.4 2004년 6월 3일 -pLinux의 모든 NPTL 스레드에 부착된 경우-f공급되다
4.5.3 2004년 4월 16일 에 대한 지원 추가mq_*Linux의 syscall;-p이제 Linux의 모든 NPTL 스레드에 연결됨
4.5.2 2004년 3월 1일
4.5.1 2003년 11월 13일
4.5 2003년 9월 24일 Roland McGrath에 전달된 Maintensership, 호환 프로세스 추적 지원을 통해 Linux에 x86-64 지원, Linux에서 SH 및 SH64 아키텍처에 대한 지원 추가.-E옵션추가
4.4 2001년 8월 19일
4.3.1 2001년 4월 7일
4.3 2001년 4월 1일 Linux에서 HP PA/RISC 및 IA-64 아키텍처 지원 추가, Linux에서 32비트 UID/GID syscall 지원 추가, FreeB 지원 추가x86의 SD
4.2 2000년 1월 21일 Linux에서 IBM Z 아키텍처 지원 추가
4.1 1999년 11월 26일 Linux에서 MIPS 아키텍처 지원 추가.strace-graph추가된 스크립트
4.0.1 1999년 7월 25일
4.0 1999년 7월 9일 고정 64비트struct statLinux에서 디코딩, Irix 64 업데이트, Solaris 업데이트
3.99.1 1999년 6월 9일
3.99 1999년 4월 27일 새로운 유지관리자인 Wichert Akkerman, Linux에서 IBM POWER, SPARC 및 ARM 아키텍처 지원 추가, Linux에서 많은 syscall 지원 추가
3.1 1996년 6월 1일 Linux에서 Irix OS, m68k 및 DEC Alpha 아키텍처에 대한 지원 추가, 지원 추가-o!옵션 구문, syscall 클래스에 대한 지원 추가(file,process); Sun OS에서 IPC syscall 지원 추가
3.0 1994년 7월 9일[60] Richard Sladkey의 초기 교차 플랫폼 버전.에 대한 지원 포함-x,-q,-e(trace,abbrev,verbose,raw,signal,read그리고write한정자),-c,-i옵션들

사용 및 기능

가장 일반적인 용도는 strace를 사용하여 프로그램을 시작하는 것인데, 이 프로그램은 프로그램에 의해 만들어진 시스템 호출 목록을 인쇄한다.이것은 프로그램이 계속 충돌하거나 예상한 대로 동작하지 않는 경우에 유용하다. 예를 들어, 스트레이스를 사용하면 프로그램이 존재하지 않거나 읽을 수 없는 파일에 접근하려고 시도하고 있다는 것을 알 수 있다.

다른 애플리케이션은 다음을 사용하는 것이다.-p실행 중인 프로세스에 부착하도록 플래그 지정이는 프로세스가 응답을 중지하고 예를 들어 프로세스가 네트워크 연결을 시도하는 동안 차단되고 있음을 나타낼 수 있는 경우에 유용하다.

다른 특징들 중에서 strace는 다음을 허용한다.

  • 추적할 syscall 이름의 필터 지정(을 통해)-e trace=옵션: 이름별(예: clone, profile, vfork), %ipc 또는 %file과 같은 미리 정의된 그룹 중 하나 사용 또는 (스트레이스 4.17 이후) 정규식 구문을 사용하는 경우,-e trace=/clock_.*.
  • 추적할 경로 목록 지정(-P /etc/ld.so.cache, 예를 들어).
  • I/O를 덤프해야 하는 파일 설명자 목록 지정(-e read=그리고-e write=옵션).
  • syscall 실행 시간 및 카운트 카운트(-T,-c,-C그리고-w옵션;-U최소 및 최대 syscall 실행 시간과 같은 추가 정보를 인쇄할 수 있는 옵션).
  • 상대 타임스탬프 또는 절대 타임스탬프 인쇄(-t그리고-r옵션).
  • 실행 중인 syscall을 변조하는 중(-e inject=syscall specification:tampering specification옵션: 반환 수정(:retval=; 4.16) 및 오류 코드(오류 코드) 이후:error=; 지정된 syscall의 strace 4.15)이므로, 신호(signals)를 주입한다.:signal=; 4.16), 지연(straise 4.16),:delay_enter=그리고:delay_exit=; 4.22) 이후부터 syscall 인수에 의해 가리키는 데이터를 수정한다(:poke_enter=그리고:poke_exit=; 5.11 이후) 사형 집행 시.
  • 파일 설명자에 대한 정보 추출(소켓 포함,-y옵션;-yy옵션은 소켓, 경로 및 장치의 주요/파일의 주/주요 번호와 같은 몇 가지 추가 정보를 제공한다.
  • (스트레이스 4.21) 기호 디망글링(Demangling)을 포함한 스택 추적 인쇄-k옵션).
  • syscall 반환 상태를 기준으로 필터링(-e status=옵션; 5.2 이후부터[note 3]).
  • 추적에 나타나는 스레드, 프로세스, 프로세스 그룹 및 세션 ID를 스트레이스의 PID 네임스페이스로 변환(Translation) 수행--pidns-translation옵션; 5.9 이후부터).
  • 프로세스, 파일 및 설명자와 관련된 SELinux 컨텍스트 정보를 디코딩하는 중(--secontext옵션; 5.12 이후부터).

스트레이스는 BTRFS_*, V4L2_*, DM_*, NSFS_*, MEM*, EVIO*, KVM_* 및 기타 여러 가지 클래스의 ioctl 명령어 인수의 디코딩을 지원하며, 다양한 넷링크 프로토콜의 디코딩도 지원한다.

strace는 시스템 호출만 상세화하므로 GNU Debugger(gdb)와 같은 코드 디버거만큼 많은 문제를 감지하는 데 사용할 수 없다.그러나 코드 디버거보다 사용하기 쉽고 시스템 관리자에게 매우 유용한 툴이다.연구자들에 의해 나중에 시스템 재생을 위한 시스템 콜 트레이스를 생성하는데도 사용된다.[61][62][63]

다음은 의 대표적인 출력의 예다.strace명령:

user@server:~$ strace ls ...open(""), O_RDONLY O_NONBLOCK O_LARGEFILE O_Directory O_CLOEXEC) = 3 fstat64(3, {st_mode=S_IFDIR 0755, st_size=4096, ...}} = 0 fcntl64(3, F_GETFD) = 0x1(플래그 FD_CLOEXEC) getdent64(3, /* 18개 항목 */, 4096) = 496getdent64(3, /* 0 항목 */, 4096) = 0 close(3) = 0 fstat64(1, {st_mode=s)IFIFO 0600, st_size=0, ...}} = 0mmap2(NULL, 4096, PROT_READ PROT_WRITE, MAP_PRIVEL MAP_ANNAMEous, -1, 0) = 0xb7f2c000 쓰기(1, "autofs\nbackups\ncache\nflexlm\ngames)"..., 86autsA을

위의 파편은 'ls' 명령으로 실행될 때 스트레이스의 출력 중 극히 일부분에 불과하다.현재 작업 디렉토리를 열고, 검사하고, 내용을 검색한 것을 보여준다.파일 이름의 결과 목록은 표준 출력에 기록된다.

유사 공구

서로 다른 운영 체제는 유사하거나 관련된 다른 계측 도구를 제공하여 유사하거나 더 고급 기능을 제공한다. 일부 도구(동일한 이름 또는 유사한 이름을 사용함)는 완전히 다른 작업 메커니즘을 사용할 수 있으며, 결과적으로 다른 기능 세트 또는 결과가 발생할 수 있다.그러한 도구는 다음과 같다.

참고 항목

메모들

  1. ^ 그러나 시스템 오류 메시지는 4.22 이후의 현재 로케일에 따라 인쇄된다.[3]
  2. ^ 테스트 제품군은 GPL v2.0+에 따라 라이센스가 부여된다.
  3. ^ 성공적인 전화만 보여주는 줄임말이야-z원래 4.5단계에서 추가된 옵션이지만 제대로 작동하지 않아 문서화되지 않았다.

참조

  1. ^ "strace 5.17 released" (Mailing list). 2022-03-27. Retrieved 2022-03-27.
  2. ^ "The strace Open Source Project on Open Hub". Openhub.net. Retrieved 2021-11-23.
  3. ^ Dmitry V. Levin (2018-04-01). "[PATCH] Add i18n support" (Mailing list). Retrieved 2021-09-02.
  4. ^ Dmitry V. Levin (2018-12-15). "I: changing the license of strace to a copyleft license" (Mailing list). Retrieved 2021-09-02.
  5. ^ Paul Kranenburg (March 2, 1992). "Strace - an alternative syscall tracer". Newsgroup: comp.sources.sun.
  6. ^ Branko Lankester (November 5, 1992). "first Linux release of strace".
  7. ^ Branko Lankester (June 18, 1993). "second Linux release of strace".
  8. ^ "strace". manned.org. June 21, 1994.
  9. ^ "SUNET's Index of /pub/usenet/ftp.uu.net/comp.sources.misc/volume43/strace". Retrieved January 14, 2015.
  10. ^ Denys Vlasenko (February 7, 2012). "How about removing non-Linux code?".
  11. ^ Dmitry V. Levin (March 16, 2011). "strace 4.6 released".
  12. ^ Dmitry V. Levin (May 2, 2012). "strace 4.7 released".
  13. ^ Dmitry V. Levin (April 20, 2012). "Noteworthy changes in release 4.7".
  14. ^ Dmitry V. Levin (October 4, 2016). "strace 4.14 released".
  15. ^ Dmitry V. Levin (March 19, 2019). "strace 5.0 released".
  16. ^ Dmitry V. Levin (May 1, 2012). "Noteworthy changes in release 4.7". GitHub.
  17. ^ Dmitry V. Levin (August 15, 2014). "strace 4.9 released".
  18. ^ Dmitry V. Levin (August 15, 2014). "Noteworthy changes in release 4.9". GitHub.
  19. ^ Dmitry V. Levin (December 14, 2016). "strace 4.15 released".
  20. ^ Dmitry V. Levin (December 14, 2016). "Noteworthy changes in release 4.15". GitHub.
  21. ^ Dmitry V. Levin (2022-03-27). "strace 5.17 released".
  22. ^ Dmitry V. Levin (2022-01-10). "strace 5.16 released".
  23. ^ Dmitry V. Levin (2021-12-01). "strace 5.15 released".
  24. ^ Dmitry V. Levin (2021-09-02). "strace 5.14 released".
  25. ^ Dmitry V. Levin (2021-07-18). "strace 5.13 released".
  26. ^ Dmitry V. Levin (2021-04-26). "strace 5.12 released".
  27. ^ Dmitry V. Levin (2021-02-17). "strace 5.11 released".
  28. ^ Dmitry V. Levin (2020-12-14). "strace 5.10 released".
  29. ^ Dmitry V. Levin (2020-09-24). "strace 5.9 released".
  30. ^ Dmitry V. Levin (2020-08-06). "strace 5.8 released".
  31. ^ Dmitry V. Levin (2020-06-01). "strace 5.7 released".
  32. ^ Dmitry V. Levin (2020-04-07). "strace 5.6 released".
  33. ^ Dmitry V. Levin (2020-02-06). "strace 5.5 released".
  34. ^ Dmitry V. Levin (2019-11-28). "strace 5.4 released".
  35. ^ Dmitry V. Levin (2019-09-25). "strace 5.3 released".
  36. ^ Dmitry V. Levin (2019-07-12). "strace 5.2 released".
  37. ^ Dmitry V. Levin (2019-05-22). "strace 5.1 released".
  38. ^ Dmitry V. Levin (2019-03-19). "strace 5.0 released".
  39. ^ Dmitry V. Levin (2018-12-26). "strace 4.26 released".
  40. ^ Dmitry V. Levin (2018-10-30). "strace 4.25 released".
  41. ^ Dmitry V. Levin (2018-08-14). "strace 4.24 released".
  42. ^ Dmitry V. Levin (2018-06-14). "strace 4.23 released".
  43. ^ Dmitry V. Levin (2018-04-05). "strace 4.22 released".
  44. ^ Dmitry V. Levin (2018-02-13). "strace 4.21 released".
  45. ^ Dmitry V. Levin (2017-11-13). "strace 4.20 released".
  46. ^ Dmitry V. Levin (2017-09-05). "strace 4.19 released".
  47. ^ Dmitry V. Levin (2017-07-05). "strace 4.18 released".
  48. ^ Dmitry V. Levin (2017-05-24). "strace 4.17 released".
  49. ^ Dmitry V. Levin (2017-02-14). "strace 4.16 released".
  50. ^ Dmitry V. Levin (2016-12-14). "strace 4.15 released".
  51. ^ Dmitry V. Levin (2016-10-04). "strace 4.14 released".
  52. ^ Dmitry V. Levin (2016-07-26). "strace 4.13 released".
  53. ^ Dmitry V. Levin (2016-05-31). "strace 4.12 released".
  54. ^ Dmitry V. Levin (2015-12-21). "strace 4.11 released".
  55. ^ Dmitry V. Levin (2015-03-06). "strace 4.10 released".
  56. ^ Dmitry V. Levin (2014-08-15). "strace 4.9 released".
  57. ^ Dmitry V. Levin (2013-06-03). "strace 4.8 released".
  58. ^ Dmitry V. Levin (2012-05-02). "strace 4.7 released".
  59. ^ Dmitry V. Levin (2011-03-15). "strace 4.6 released".
  60. ^ Rick Sladkey (1994-07-09). "v43i075: strace - system call tracer for sunos, linux, svr4, solaris2, Part01/10".
  61. ^ Horky, Jiri (2013). "The ioapps IO profiler and IO traces replayer". Retrieved 2013-09-16.
  62. ^ Waterland, Amos (2007). "The sreplay system call replayer". Retrieved 2013-09-16.
  63. ^ Burton, Ariel (1998). "Workload characterization using lightweight system call tracing and reexecution" (PDF). Retrieved 2013-09-16.
  64. ^ "XTrace - trace X protocol connections". xtrace.alioth.debian.org. Retrieved 2014-08-12.
  65. ^ "dtrace(1) Mac OS X Manual Page". Developer.apple.com. Retrieved 2014-07-23.
  66. ^ "IntellectualHeaven - Strace For Windows". intellectualheaven.com. Retrieved 29 January 2015.

외부 링크