2016-08-25 18 views
2

나는 C++을 gprof 2.25.2 (Cygwin에서)로 프로파일 링하려고 노력 중이며 호출 시간이 아니라는 것을 알고있는 함수에서 10 %의 시간을 소비하고 있다고보고하고있다. (필자는 이것을 확인하기 위해 관련 함수에 print 문을 두었습니다.) 또한이 함수는 재귀 적으로 호출하는 것으로 간주됩니다 (호출 횟수는 500+16636500 임).gprof의 말도 안되는 결과

충분히 큰 프로그램으로 여기에 게시 할 수있는 최소한의 작업 예제를 쉽게 만들 수는 없지만 누군가가이 문제를 일으킬 수있는 것에 대해 아이디어가 있으면 알려 주시면 감사하겠습니다.

편집 : CMake + g ++로 건물. CMAKE_BUILD_TYPE=RELWITHDEBINFO.

+0

아마도'RELWITHDEBINFO'를'DEBUG'로 바꿔 줄 것입니다. – texasflood

+0

@texasflood 그것은 오류를 없애는데 더 이상 프로파일 링 결과가 실제 환경에서 실행되는 것처럼 프로그램을 대표한다고 확신하지 않습니다. – Mohan

+0

이것은 일반적으로 근본적으로 피할 수없는 문제입니다. 당신이 코드를 프로파일 링 할 경우, 그렇지 않으면 당신이 쓰는 소스 코드와 실제 오브젝트 파일 사이의 연결이 매우 복잡하게, 더 최적화 할 수 없습니다 (함수와 변수를 추가하고, 예를 들어 제거 할 수있다). 물론 실제 환경에서 코드를 실행하려면 완전히 최적화되도록하고 프로파일 링에서 가져온 결론을 무효로 만들 수도 있습니다. 이것에 대한 쉬운 대답은 없습니다 – texasflood

답변

0

나는이 오래된 대한 소스 코드 또는 실행 파일에있는 디버그 기호의 경우 같은 소리 ... 당신의 gcc/g ++ 사용하고

을 가정합니다. 빌드 공간을 정리하고 다시 컴파일하십시오 (물론 -g 또는 -ggdb3). 최적화를 사용하여 컴파일하고이를 해제 할 수 있다면 (예 : -O1, -O2 또는 -O3 대신 -O0)이 실행을 위해 최적화하십시오. 문제가 해결되면 -O1 또는 -O2을 시도하고 결과를 확인하십시오.

+0

슬프게도 +'-ggdb3 -O0'을 추가해도 문제가 해결되지 않습니다. – Mohan