strace 명령 시작
1) 소개:strace는 프로세스가 호출한 시스템 호출과 프로세스가 받은 신호를 차단하고 기록한다.그것은 매우 유용한 프로그램 진단과 디버깅 도구다.
2) 사용법:
(1) 예 1:
int main()
{
std::cout << "hello world" << std::endl;
return 0;
}
a.out으로 컴파일한 후 strace -T -tt./a.out >/dev/null(a.out과strace의 출력이 혼동되지 않도록 방지), 다음은 출력입니다.
12:38:36.908803 execve("./a.out", ["./a.out"], [/* 28 vars */]) = 0 <0.000285>
12:38:36.909372 brk(0) = 0x1127000 <0.000062>
12:38:36.909528 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6ce17d9000 <0.000089>
12:38:36.909784 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) <0.000076>
... ...
12:38:36.918265 write(1, "hello world
", 12) = 12 <0.000055>
12:38:36.918434 exit_group(0) = ?
12:38:36.918573 +++ exited with 0 +++
시스템 호출에 대한 줄마다 이름, 매개 변수, 반환 값이 인쇄됩니다. (오류가 발생했을 때 해당하는 오류 문자열도 있습니다.)strace는 기본적으로 표준 오류에 이 정보를 인쇄합니다.
옵션: - T: 시스템 호출에 소요된 시간을 표시합니다. -t: 줄마다 시간을 추가합니다.
strace-c./실행a.out >/dev/null, 출력은 다음과 같습니다.
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
34.50 0.000069 4 17 mmap
24.00 0.000048 10 5 open
16.00 0.000032 3 10 mprotect
8.00 0.000016 4 4 read
6.00 0.000012 2 6 fstat
5.50 0.000011 2 5 close
4.00 0.000008 8 1 1 access
1.00 0.000002 2 1 execve
0.50 0.000001 1 1 write
0.50 0.000001 1 1 brk
0.00 0.000000 0 1 munmap
0.00 0.000000 0 1 1 ioctl
0.00 0.000000 0 1 arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00 0.000200 54 2 total
옵션:-c: 모든 시스템이 호출되는 총 횟수, 총 소모 시간과 총 오류 횟수 등을 통계하고 프로그램이 종료될 때 출력합니다.Linux에서 이 시간은 시스템 시간(system time, 즉 CPU가 핵에서 실행되는 시간)이다.
(2) 예 2:
int main()
{
sleep(100);
return 0;
}
a.out으로 컴파일한 후 터미널 A에서 실행;터미널 B에서 strace -p`pidof a.out`을 실행합니다.터미널 A에서 a.out 프로세스를 백그라운드(Ctrl-z)로 자른 다음 다시 커팅(fg)하면 터미널 B의 출력(프로세스가 받은 신호에 대한 정보)을 볼 수 있습니다.
Process 8885 attached
restart_syscall(<... resuming interrupted call ...>
) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
--- SIGTSTP {si_signo=SIGTSTP, si_code=SI_KERNEL, si_value={int=3722471000, ptr=0x7f6fdde06658}} ---
--- stopped by SIGTSTP ---
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=2455, si_uid=0} ---
restart_syscall(<... resuming interrupted call ...>
strace는 지정한 PID 프로세스에 -p 옵션을 사용합니다. (여러 개의 -p는 여러 프로세스에 attach할 수 있습니다.)
끊임없이 공부하는 중...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.