funk_a
사용자 정의 함수를 호출하려고 하는데 strace
찾을 수 없는 것 같습니다. funk_a가 스스로 호출될 수 있음을 확인했습니다. 어떤 의견이라도 감사하겠습니다.
$ source ./strace_sample.sh
$ funk_a
Earth, Wind, Fire and Water
$ funk_b
Get on up
strace: Can't stat 'funk_a': No such file or directory
$ dpkg -p strace|grep Vers
Version: 4.8-1ubuntu5
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
strace_sample.sh
#!/bin/bash
function funk_a {
echo "Earth, Wind, Fire and Water"
}
function funk_b {
echo "Get on up"
strace -o trace_output.txt -c -Ttt funk_a
}
감사해요.
답변1
strace
strace
실행 파일 만 가능합니다 .
funk_a
은 함수, 즉 쉘의 프로그래밍 구성이지 실행할 수 있는 것이 아닙니다.
추적할 수 있는 유일한 것은 strace
함수 본문을 평가하는 새로운 셸입니다. 예를 들면 다음과 같습니다.
strace -o trace_output.txt -Ttt bash -c "$(typeset -f funk_a); funk_a"
-c
( 의미가 없어 삭제했습니다 -Ttt
.)
그러나 이 함수에 의해 수행된 시스템 호출 외에도 bash
로드 및 초기화 중(그리고 정리 및 종료 후) 수행된 모든 시스템 호출도 볼 수 있습니다.write
funk_a
또는 strace
쉘이 평가할 때 함수의 pid를 추적 할 수 있습니다 funk_a
.
strace -o trace_output.txt -Ttt -p "$$" &
funk_a
kill "$!"
그러나 쉘의 PID 에 추가될 때쯤에는 strace
쉘이 함수 해석을 완료했을 가능성이 높습니다. 다음과 같은 동기화를 시도해 볼 수 있습니다.
strace -o trace_output.txt -Ttt -p "$$" &
tail -F trace_output.txt | read # wait for some output in trace_output.txt
funk_a
kill "$!"
그러나 이 경우에도 타이밍에 따라 trace_output.txt
사용된 시스템 호출에 대한 일부 설명이 포함되거나 명령 추적을 출력 파일에 쓸 시간이 되기 전에 종료 tail|read
될 수 있습니다 .kill
strace
echo
더 나은 접근 방식은 두 개의 식별 가능한 시스템 호출 간에 호출을 래핑하는 것입니다 funk_a
.
strace -fo >(sed -n '1,\|open("///dev/null|d
\|open("/dev///null|q;p' > trace_output.txt
) -Ttt -p "$$" &
sleep 1 # give enough time for strace to start
exec 3< ///dev/null # start signal
funk_a
exec 3< /dev///null # end signal
답변2
그걸 발견하고 나서 깨달았어요이 스레드strace
실행 파일 만 호출할 수 있습니다.
위의 예를 다음과 같이 변경하면 작동합니다.
유용
#!/bin/bash
echo "Earth, Wind, Fire and Water"
strace_sample.sh
#!/bin/bash
function funk_b {
echo "Get on up"
#strace -o funk_a.out -c -Ttt funk_a
strace -o util.out -c -Ttt ./util.sh
}
결과
$ funk_b
Get on up
Earth, Wind, Fire and Water
$ more util.out
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.00 0.000000 0 7 read
0.00 0.000000 0 1 write
0.00 0.000000 0 27 18 open
: