2013-08-14 3 views
0

리눅스 시스템에서 gprof가 정상적으로 작동합니다. 샘플 및 일부 콜 카운트 정보를 얻고 있습니다. 그래서 속성을 ((hot)) 일부 기능에 추가했습니다. 이제 그들은 gprof 샘플 출력에서 ​​벗어났습니다. 단, 아무런 핫 기능도 "샘플링"되지 않았습니다. 핫 기능은 여전히 ​​통화 수 정보에 나타납니다. 이 문제를 어떻게 해결할 수 있습니까?gprof 출력의 핫 기능 손실

두 가지 중 하나가 발생했다고 생각합니다. gprof 필터는 관련 주소가 무엇인지 생각하고 있으며 핫 기능은 현재 .text.hot 섹션에 있으므로이 범위를 벗어났습니다. 또는, 어떻게 든 핫 기능을위한 디버그 데이터에 혼동이 생겨서 gprof가이를 무시하고 있습니다.

+0

조립품 출력 (gcc 옵션 -S)을 보았습니까? text.hot 섹션의 디버그 정보가 어떻게 든 다르거 나 누락 되었습니까? – Chris

+0

Fedora 19에서 일반적인 gcc 툴체인을 사용하여 이것을 재현하려고 시도했지만 attribute ((hot))는 gprof 동작을 어떤 식 으로든 변경하지 않습니다. 툴체인의 세부 사항과 프로그램을 컴파일하는 데 사용하는 플래그를 게시 할 수 있습니까? – Chris

답변

1

attribute((hot)) 또한 동일한 소스 파일 내에서 함수가 인라인 될 가능성이 높아집니다. 함수의 인라인되지 않은 버전이 호출되면 (아마도 다른 모듈에서) 호출 횟수가 증가합니다. 호출 사이트 만 프로파일 러에 알려지기 때문에 함수가 샘플에 표시되지 않습니다.

통화 수를 확인하여 문제가 발생했는지 여부를 감지 할 수 있어야합니다. 그들이 attribute((hot))으로 훨씬 더 낮 으면, 인라인이 원인 일 것입니다.

+0

감사합니다. 나는지도 파일을 보았고 .text.hot 섹션에 인스턴스를 볼 수 있습니다. 또한 나는 뜨거운 "선"을 표시 할 도구가 있습니다. 기능이 인라인 된 경우 "핫 기능"목록에서 사라졌지만 줄은 여전히 ​​뜨거울 수 있습니다. 그래서 그것은 통계가 완전히 함수에 대해 누락 된 것을 좋아합니다. 또한 "함수"를 짚어보고 인라인 함수에 속한 코드의 "행"을 찾을 수 있습니다. 이것은 일어나지 않습니다. 샘플이 통계에서 누락되었습니다. :( –