{{위키데이터 속성 추적}}
{{소문자}}
{{소프트웨어 정보
|name                    = strace
|logo                    = Strace logo.svg
|screenshot              =
|caption                 =
|collapsible             =
|author                  = 폴 크라넨부르크(Paul Kranenburg)
|developer               = 드미트리 레빈(Dmitry Levin)
|released                =
|discontinued            =
|latest release version  = 4.15
|latest release date     = {{시작 날짜와 나이|2016|12|14}}
|latest preview version  =
|latest preview date     =
|frequently updated      =
|programming language    = [[C (프로그래밍 언어)|C]]
|operating system        = [[리눅스]]
|platform                =
|size                    =
|language                =
|status                  =
|genre                   = [[디버그]]
|license                 = [[BSD 라이선스|BSD]]
|website                 = {{URL|https://sourceforge.net/projects/strace/}}
}}
'''strace'''는 진단, [[디버그]], 지시적 [[사용자 공간]] 유틸리티이다. [[시스템 호출]], [[유닉스 신호|신호]] 전달자, 프로세스 상태의 변화를 포함하는 [[프로세스]]와 [[리눅스 커널]] 간 상호 작용을 감시하는데 사용된다. strace는 [[ptrace]]라는 커널 기능을 통해 사용될 수 있다.

일부 [[유닉스 계열]] 운영 체제는 [[truss]]와 같은 strace 유사 진단 도구를 제공한다.


== 역사 ==
strace는 본래 1991년에 [[썬OS]]가 작성한 것으로, 저작권 고지에 따르면 1992년 일찍이 comp.sources.sun 제3권에 출판되었다. 초기 [[README]] 파일은 다음을 포함하였다:<ref>{{뉴스그룹 인용
 |url=https://stuff.mit.edu/afs/sipb/project/eichin/cruft/machine/sun/sun-Strace
 |author=Paul Kranenburg
 |date=March 2, 1992
 |제목=Strace - an alternative syscall tracer
 |newsgroup=comp.sources.sun
}}</ref>

<pre>
strace(1)는 썬이 제공했던 프로그램 trace(1)과 매우 비슷한 썬(tm) 시스템용
시스템 호출 트레이서이다. strace(1)은 디버그 프로그램을 정렬하는데 유용한
유틸리티로서 안타깝게도 썬이 제공했던 시스템 소프트웨어 거의 대부분이
그러하듯 소스는 제공되지 않는다.
</pre>

나중에 Branko Lankester는 이 버전을 [[리눅스]]로 포팅하였으며, 그의 버전은 1992년 11월 공개되었고 1993년에 제2판이 공개되었다.<ref>{{웹 인용
 |url=ftp://ftp.funet.fi/pub/Linux/tools/strace.tar.Z
 |제목=first Linux release of strace
 |author=Branko Lankester
 |date=November 5, 1992
}}</ref><ref>{{웹 인용
 |url=ftp://ftp.funet.fi/pub/Linux/tools/strace-2.tgz
 |제목=second Linux release of strace
 |author=Branko Lankester
 |date=June 18, 1993
}}</ref> Richard Sladkey는 이 각각의 strace 버전을 병합하였고 1994년에 이 프로그램을 [[SVR4]]와 [[솔라리스 (운영 체제)|솔라리스]]에 이식하였으며<ref>{{웹 인용
 |url=http://manned.org/strace/e47b83b9
 |제목=strace
 |publisher=manned.org
 |date=June 21, 1994
}}</ref> 그 결과 1994년 중순에 comp.source.misc에 strace 3.0을 발표하기에 이르렀다.<ref>{{웹 인용
 |url          = http://ftp.sunet.se/pub/usenet/ftp.uu.net/comp.sources.misc/index
 |제목       = SUNET's Index of /pub/usenet/ftp.uu.net/comp.sources.misc/volume43/strace
 |accessdate   = January 14, 2015
 |보존url    = https://web.archive.org/web/20070911180544/http://ftp.sunet.se/pub/usenet/ftp.uu.net/comp.sources.misc/index
 |보존날짜 = 2007년 9월 11일
 |url-status = dead
}}</ref>

비 [[리눅스]] 운영 체제용 일부(죽은<ref>{{웹 인용
 |url=http://sourceforge.net/p/strace/mailman/message/28799000/
 |제목=How about removing non-Linux code?
 |author=Denys Vlasenko
 |date=February 7, 2012
}}</ref>) 코드가 포함된 strace의 마지막 버전은 2011년 3월에 공개된 4.6이다.<ref>{{웹 인용
 |url=http://sourceforge.net/p/strace/mailman/message/27209257/
 |제목=strace 4.6 released
 |author=Dmitry V. Levin
 |date=March 16, 2011
}}</ref> 2012년 5월 공개된 strace 버전 4.7에서는<ref>{{웹 인용
 |url=http://sourceforge.net/p/strace/mailman/message/29210530/
 |제목=strace 4.7 released
 |author=Dmitry V. Levin
 |date=May 2, 2012
}}</ref> 리눅스와 관련 없는 모든 코드가 제거되었다.<ref>{{웹 인용
 |url=http://sourceforge.net/p/strace/code/ci/v4.7/tree/NEWS
 |제목=Noteworthy changes in release 4.7
 |author=Dmitry V. Levin
 |date=April 20, 2012
}}</ref>


== 사용 ==
가장 일반적인 사용은 strace를 사용하여 프로그램을 시작하고 이것이 프로그램에 의해 만들어진 시스템 호출들의 리스트를 보여주는 것이다. 이것은 만약 프로그램이 지속적으로 충돌되거나 예상대로 행동하지 않는 경우에 유용하다; 예를 들면 strace를 사용하는 것이 프로그램이 존재하지 않거나 읽을 수 없는 파일에 대한 접근을 시도하는지를 밝힐 수 있다.
대체 애플리케이션은 -p 플래그를 사용해서 실행 중인 프로세스를 어태치하는 것이다. 이것은 프로세스가 반응이 중단되었을 때 유용할 수 있으며, 예를 들면 프로세스가 네트워크 연결을 시도하는 동안 블록된 것을 밝힐 수 있다.
strace가 단지 시스템 호출들을 보여주기 때문에, [[GNU 디버거]] 같은 코드 디버거만큼의 많은 문제들을 탐지할 수는 없다. 그러나 코드 디버거를 사용하는 것보다 쉬운 방법이며, 시스템 관리자들에게 극단적으로 유용한 도구이다. 이것은 또한 연구자들이 이후 시스템 호출 재개를 추적하기 위한 용도로 시스템 호출 트레이스를 생성하는데 사용될 수 있다.<ref name=Horky13>
{{웹 인용
 |last = Horky
 |first = Jiri
 |year = 2013
 |title = The ioapps IO profiler and IO traces replayer
 |url = http://code.google.com/p/ioapps/
 |accessdate = 2013-09-16}}
</ref><ref name=Waterland07>{{웹 인용
 |last = Waterland
 |first = Amos
 |year = 2007
 |title = The sreplay system call replayer
 |url = http://people.seas.harvard.edu/~apw/sreplay/
 |accessdate = 2013-09-16
 |archive-date = 2016-04-01
 |archive-url = https://web.archive.org/web/20160401224445/http://people.seas.harvard.edu/~apw/sreplay/
 |url-status = 
 }}</ref><ref name=Burton98>
{{웹 인용
 |last = Burton
 |first = Ariel
 |year = 1998
 |title = Workload characterization using lightweight system call tracing and reexecution
 |url = http://www.doc.ic.ac.uk/~phjk/Publications/WkldChctrsnUsngTracesReex.pdf
 |accessdate = 2013-09-16}}
</ref>


== 예시 ==
다음은 strace 명령어의 일반적인 예시를 보여준다.

<pre>
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 (flags FD_CLOEXEC)
getdents64(3, /* 18 entries */, 4096)   = 496
getdents64(3, /* 0 entries */, 4096)    = 0
close(3)                                = 0
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000
write(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsA
</pre>

위의 내용들은 'ls' 명령어를 실행했을 때의 출력의 단지 작은 부분만을 보여준다. 이것은 현재 워킹 디렉토리가 열려있으며, 조사되고 있고 내용이 검색된다는 것을 보여준다. 파일 이름들의 결과 리스트는 표준 출력으로 쓰여졌다.

== 비슷한 도구 ==
다른 운영 체제들에서 비슷한 역할을 하는 도구들이 존재한다.

* [[리눅스]]는 라이브러리와 시스템 호출들을 트레이스할 수 있는 [[ltrace]]가 있으며, X 윈도우 프로그램들을 트레이스할 수 있는 xtrace<ref>{{웹 인용
 |url          = http://xtrace.alioth.debian.org/
 |title        = XTrace - trace X protocol connections
 |website      = xtrace.alioth.debian.org
 |date         = 
 |accessdate   = 2014-08-12
 |보존url    = https://web.archive.org/web/20140805180608/http://xtrace.alioth.debian.org/
 |보존날짜 = 2014-08-05
 |url-status = dead
}}</ref>, [[SystemTap]] 등이 있다.
* [[마이크로소프트 윈도우]]는 StraceNT<ref>{{웹 인용
 |url=http://intellectualheaven.com/default.asp?BH=StraceNT
 |title=IntellectualHeaven - Strace For Windows
 |work=intellectualheaven.com
 |accessdate=29 January 2015
 |archive-date=2016-03-05
 |archive-url=https://web.archive.org/web/20160305001814/http://intellectualheaven.com/default.asp?BH=StraceNT
 |url-status=
 }}</ref>라고 불리는 비슷한 유틸리티가 있으며 [[프로세스 모니터]]라고 불리는 비슷한 GUI 기반 유틸리티도 존재한다.

== 같이 보기 ==
* [[gdb]]
* [[lsof]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://sourceforge.net/projects/strace/ Project page]
* [http://man7.org/linux/man-pages/man1/strace.1.html Manual page]
* [http://www.osreviews.net/reviews/admin/strace OS Reviews article on strace]

[[분류:유닉스 프로그래밍 도구]]
[[분류:C로 작성된 자유 소프트웨어]]
[[분류:명령줄 소프트웨어]]