리눅스 프로그램은 다음과 같은 것을 요청합니다
핵심
그들을 위해 몇 가지 일을하십시오. NS
특히
명령은 이러한 시스템 호출을 나타냅니다. 프로그램이 어떻게 작동하는지, 때로는, 왜 그렇지 않은지를 이해하는 데 사용할 수 있습니다.
커널 및 시스템 호출
그들이 할 수있는만큼 똑똑한 것처럼 컴퓨터 프로그램은 모든 것을 스스로 할 수 없습니다. 그들은 특정 기능을 수행하기 위해 요청을해야합니다. 이러한 요청은 Linux 커널로 이동합니다. 일반적으로 프로그램이 호출되는 라이브러리 또는 기타 소프트웨어 인터페이스가 있으며 라이브러리는 라이브러리를 시스템 호출을 커널로 호출합니다.
프로그램이 이루어진 시스템 호출을 볼 수 있으며 응답이 귀하가 귀하의 관심있는 프로그램의 내부 작동을 이해하는 데 도움이 될 수 있습니다. 이것은
뭐라고 요
특히
하다
...에 문제를 해결하고 병목 현상을 찾는 데 도움이 될 수 있습니다.
이것은과 같지 않습니다
응용 프로그램 디버깅
도구와 함께
Gdb.
...에 디버깅 프로그램을 사용하면 프로그램의 내부 작동을 실행할 수 있습니다. 프로그램의 논리를 단계별로 연결하고 메모리 및 가변 값을 검사 할 수 있습니다. 비교해 보면,
특히
프로그램이 실행중인 시스템 호출 정보를 캡처하는 것입니다. 추적 된 프로그램이 종료되면,
특히
터미널 창에 시스템 호출 정보를 나열합니다.
시스템 호출은 파일에 대한 읽기 및 쓰기 작업, 프로세스를 종료하는 등의 모든 종류의 로우 레벨 기능을 제공합니다. 수백 개의 시스템 호출 목록이 있습니다. syscalls 남자 페이지 ...에
관련된: GDB와 디버깅 : 시작하기
Strace 설치
만약에
특히
컴퓨터에 아직 설치되어 있지 않으면 매우 쉽게 설치할 수 있습니다.
Ubuntu 에서이 명령을 사용하십시오.
Sudo APT 설치 Strace
Fedora 에서이 명령을 입력하십시오.
Sudo DNF 설치 Strace
Manjaro 에서이 명령은 다음과 같습니다.
Sudo Pacman -sy Strace
Strace와의 첫 단계
우리는 소규모 프로그램을 사용하여 시연 할 것입니다
특히
...에 그것은 많이하지 않습니다. 파일을 열고 텍스트 줄을 씁니다. 오류 검사가 없습니다. 우리가 함께 사용할 무언가를 가지고 있기 때문에 빠른 해킹 일뿐입니다.
특히
...에
우리는 이것을 "file-io.c"라는 파일로 저장하고 컴파일했습니다.
GCC.
실행 가능한 실행 파일로
스튜어
, "
성
경주
전
앰플."
GCC -O STEX 파일 -IO.C
우리는 전화 할게
특히
명령 행에서 우리가 추적하고자하는 프로세스로 새로운 실행 파일의 이름을 전달하십시오. 우리는 Linux 명령이나 다른 바이너리 실행 파일을 쉽게 추적 할 수 있습니다. 우리는 두 가지 이유로 우리의 작은 프로그램을 사용하고 있습니다.
첫 번째 이유는 그 것이다
특히
자세한 것이다. 많은 출력이있을 수 있습니다. 당신이 사용할 때 훌륭합니다
특히
분노로, 그러나 그것은 처음에는 압도적 일 수 있습니다. 제한이 있습니다
특히
우리의 작은 프로그램을위한 출력. 두 번째 이유는 우리의 프로그램이 기능이 제한적이며 소스 코드는 짧고 직선적이라는 것입니다. 이렇게하면 출력의 어떤 섹션이 프로그램의 내부 작업의 다른 부분을 참조하는지를 쉽게 식별 할 수 있습니다.
strace ./stex
우리는 분명히 볼 수 있습니다
쓰다
시스템 호출 텍스트를 "파일에 씁니다"를 열었던 파일과
exit_group.
시스템 호출. 이렇게하면 응용 프로그램의 모든 스레드가 종료되고 반환 값을 셸로 다시 전송합니다.
출력 필터링
우리의 간단한 데모 프로그램을 사용하더라도 꽤 많은 출력이 있습니다. 우리는 그를 사용할 수 있습니다
-이자형
(표현식) 옵션. 우리가보고 싶은 시스템 호출의 이름을 통과 할 것입니다.
strace -e write ./stex
쉼표로 구분 된 목록으로 추가하여 여러 시스템 호출을보고 할 수 있습니다. 시스템 호출 목록에 공백을 포함하지 마십시오.
Strace -e 닫기, 쓰기 ./stex
출력을 파일로 보냅니다
출력을 필터링하는 이점은 출력을 필터링하는 문제점이기도합니다. 당신은 당신이 보려는 것을 알고 있지만 다른 것을 보지 못합니다. 그리고 그 일부 다른 출력은 당신이 보려는 물건보다 더 유용 할 수 있습니다.
때로는 모든 것을 캡처하고 전체 결과 집합을 검색하고 스크롤하는 것이 더 편리합니다. 그렇게하면 실수로 중요한 것을 제외하지는 않습니다. NS
-영형
(출력) 옵션을 사용하면 출력을
특히
텍스트 파일에 대한 세션.
strace -o trace-output.txt ./stex
그런 다음 할 수 있습니다
사용
더 적은
명령
목록을 스크롤하고 시스템 호출을 검색하거나 다른 이름으로 검색하십시오.
덜 추적 - 출력 .TXT
이제 모든 것을 사용할 수 있습니다
더 적은
출력을 조사하기위한 검색 기능.
관련된: Linux에서 less 명령을 사용하는 방법
타임 스탬프 추가
여러 가지 다른 시간 소인을 출력에 추가 할 수 있습니다. NS
-NS
(상대 타임 스탬프) 옵션은 각 연속 시스템 호출의 시작 간의 시간차를 보여주는 시간 소인을 추가합니다. 이러한 시간 값에는 이전 시스템 호출에서 소요 된 시간과 다음 시스템이 호출하기 전에 프로그램이 수행하는 다른 것들이 포함됩니다.
strace -r ./stex
타임 스탬프는 각 출력 행의 시작 부분에 표시됩니다.
각 시스템 호출에서 소요되는 시간을 보려면 다음을 사용하십시오.
-NS
(syscall-times) 옵션. 각 시스템 호출 내부에서 소요되는 시간 기간을 보여줍니다.
strace -t ./stex
시간 기간은 각 시스템 통화 회선의 끝에 표시됩니다.
각 시스템 호출이 호출되는 시간을 보려면 다음을 사용하십시오.
...의
(절대 시간 소인) 옵션. 이것은 마이크로 초 해상도로 "벽 클럭"시간을 보여줍니다.
strace -tttt ./stex
시간은 각 행의 시작 부분에 표시됩니다.
실행중인 프로세스 추적
추적 할 프로세스가 이미 실행 중이면 여전히 첨부 할 수 있습니다.
특히
그것에. 이렇게하려면 프로세스 ID를 알아야합니다. 너는 할 수있어
사용하다
추신
~와 함께
grep.
이것을 찾으려면. 우리는 Firefox가 실행 중입니다. 그 이름의 ID를 찾으려면
파이어 폭스
프로세스, 우리는 사용할 수 있습니다
추신
그리고
그것을 통해 파이프
grep.
...에
PS -E | grep firefox
우리는 프로세스 ID가 8483 인 것을 볼 수 있습니다. 우리는
-NS
(프로세스 ID) 옵션을 알려줍니다
특히
어떤 과정을 부착 할 수 있습니다. 사용할 필요가 있습니다
Sudo.
:
Sudo Strace -P 8483
알림이 표시됩니다
특히
프로세스에 자신을 첨부 한 다음 시스템 추적 호출이 일반적으로 터미널 창에 표시됩니다.
보고서 작성
NS
-씨
(요약 만 해당) 옵션 원인
특히
보고서를 인쇄하려면. 추적 프로그램이 수행 한 시스템 호출에 대한 정보는 테이블을 생성합니다.
strace -c ./stex
열은 다음과 같습니다.
- % 시각 : 각 시스템 호출에 소요 된 실행 시간의 백분율.
- 초월 : 각 시스템 호출에서 초 단위로 표시되는 총 시간과 마이크로 초를 표시합니다.
- USECS / Call. : 평균 시간은 각 시스템 호출에서 소비 된 마이크로 초입니다.
- 전화 : 각 시스템 호출이 실행 된 횟수입니다.
- 오류 : 각 시스템 호출에 대한 오류 수입니다.
- syscall. : 시스템 호출의 이름입니다.
이 값은 실행 및 종료하는 사소한 프로그램에 대한 0을 신속하게 보여줍니다. 데모 응용 프로그램보다 더 의미있는 것을하는 프로그램에 대한 실제 가치가 표시됩니다.
깊은 통찰력, 쉽게
NS
특히
출력은 시스템 호출이 이루어지는 시스템을 보여줄 수 있으며, 어떤 실행 시간이 커널 사이드 코드 안에 얼마나 많은 실행 시간을 보냈는지 보여줍니다. 훌륭한 정보입니다. 종종 코드 내부에서 무슨 일이 일어나는지 이해하려고 할 때 바이너리가 많은 기능을 수행하기 위해 커널과 거의 비주주를 상호 작용하는 것이 쉽습니다.
사용하여
특히
, 당신은 완전한 그림을 본다.