정적 함수를 포함한 모든 함수를 나열하는 gprof "플랫 프로파일"출력이 있습니다. 그러나 "정적"으로 선언 된 함수의 경우 "호출", "자체 ms/호출"및 "전체 ms/호출"열은 모두 비어 있습니다. 이 기능들에 대한 데이터도보고 싶습니다. 실제로 모듈의 공용 함수보다 훨씬 흥미 롭습니다. 예를 들어 :gprof 출력에서 정적 호출보기
% cumulative self self total
time seconds seconds calls ms/call ms/call name
55.32 3.38 3.38 Static_Func1
16.61 4.39 1.01 Static_Func2
12.44 5.16 0.76 2 380.00 380.00 Public_Func1
9.90 5.76 0.60 Static_Func3
2.78 5.93 0.17 Static_Func4
0.98 5.99 0.06 12463589 0.00 0.00 main
0.65 6.03 0.04 1200000 0.00 0.00 Public_Func2
0.33 6.05 0.02 2 10.00 10.00 Public_Func3
0.33 6.07 0.02 Static_Func5
0.33 6.09 0.02 free
0.33 6.11 0.02 malloc
0.00 6.11 0.00 1 0.00 0.00 Public_Func4
나는 왜 나는 이러한 기능에 대한 출력이 표시되지 않는 설명하지만, 정적 선언을 제거에서 어쨌든 그것을 따로 볼 수있는 방법이 Why does gprof occasionally not print number of calls for particular functions? 발견? 나는 -a
으로 정적 함수를 출력하는 것을 억제 할 수 있다는 것을 알고 있습니다. 그러나 나는 그 반대를 원하고 그것에 대한 옵션을 보지 않습니다.
위의 프로필에있는 정적 함수에서 "정적"키워드를 제거하도록 코드를 편집하면 main에 대한 "호출"이 비어있게됩니다. (나는 1을 기대하기 때문에 어느 쪽이든 틀린 것입니다). 보다 유용하게도 필드가 채워질뿐만 아니라 정적 함수에 의해 호출 된 함수도 나열됩니다. 코드를 변경하지 않고도 그렇게 할 수 있기를 바랍니다.
또한 동일한 문제가있는 것으로 보이는 이 발견되었지만 해결책은 컴파일러가 일부 기능을 인라인하지 못하도록 코드를 편집하는 것이 었습니다. 프로파일 링을 위해서 코드를 편집하고 싶지는 않습니다. 현재 존재하는 모든 기능을 볼 수 있기를 원합니다. 윈도우 7에서는 MinGW 쉘에서 64 비트 실행
버전 정보 :
$ which gprof
/mingw/bin/gprof.exe
$ gprof --version
GNU gprof (GNU Binutils) 2.22
Based on BSD gprof, copyright 1983 Regents of the University of California.
This program is free software. This program has absolutely no warranty.
플랫 프로파일 출력 샘플을 추가 할 수 있습니까? – dragosht
예제 프로파일을 추가하도록 편집되었습니다. 이 코드는 실제 코드이지만 실제 함수 이름은 대부분 제거했습니다. – Ben
이것이'binutils' /'gprof' 패키지의 버그 일 것 같아요. 어떤 플랫폼을 실행하고 있습니까? 내'windows 7' /'cygwin' (32 비트)에서 매우 유사한 동작을 경험하고 있습니다 ... – dragosht