주어진 프로그램이 GNU gprof 인스 트루먼 테이션으로 컴파일되었는지, 즉 파일을 생성하는지 확인하기 위해 프로그램 을 실행 하지 않고 컴파일러와 링커 모두에 '-pg'플래그가 전달 되었는지 확인할 수 gmon.out
있습니까?
주어진 프로그램이 GNU gprof 인스 트루먼 테이션으로 컴파일되었는지, 즉 파일을 생성하는지 확인하기 위해 프로그램 을 실행 하지 않고 컴파일러와 링커 모두에 '-pg'플래그가 전달 되었는지 확인할 수 gmon.out
있습니까?
답변:
당신은 기능에 대한 참조를 확인할 수있다 mcount
(또는 아마도 _mcount
나 __mcount
에 따라 프로파일 링의 구현 ). 이 기능은 프로파일 링이 작동하는 데 필요하며 프로파일 링되지 않은 이진 파일에는 없어야합니다.
다음과 같은 것 :
$ readelf -s someprog | egrep "\s(_+)?mcount\b" && echo "Profiling is on for someprog"
위의 빠른 테스트에서 작동합니다.
답변에 더 추가 :
계측을 확인하려면 mcount / gmon을 grep하십시오.
$ readelf -s <binary> | egrep "gmon|mcount"
20: 0000000000401160 63 FUNC GLOBAL DEFAULT 12 __gmon_start__
28: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mcount@GLIBC_2.2.5 (2)
36: 0000000000000000 0 FILE LOCAL DEFAULT ABS gmon-start.c
39: 00000000004011a0 0 FUNC LOCAL DEFAULT 12 call_gmon_start
100: 0000000000401160 63 FUNC GLOBAL DEFAULT 12 __gmon_start__
114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND mcount@@GLIBC_2.2.5
컴파일하고 -pg
플래그 와 연결해야 합니다. 그렇지 않으면 gmon.out
생성되지 않습니다. stackoverflow 링크.
플래그를 사용 gmon.out
하여 컴파일 / 링크하더라도 gprof를 실행중인 바이너리가 파일을 생성하지 않는다는 것을 알았습니다 -pg
. 그 이유는-나는 응용 프로그램을 죽이고 있었고, 깨끗한 출구는 아니 었습니다. gprof
프로그램이 정상적으로 종료 될 때만 출력을 생성합니다. stackoverflow 링크